⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 node.java~1~

📁 一个目录树
💻 JAVA~1~
字号:
import java.util.*;

/**
 * 目录树的一个结点. <br/>
 * 它的主要属性有结点标识、父结点、它在目录树中的层次(根结点为0)、结点的值、子结点。
 * <p>Copyright: Copyright (c) 2004</p>
 * @author flyxxxxx
 * @version 1.0
 */
public class Node {
  private int id;
  private Node parent;
  private int level;
  private Object value;
  protected ArrayList childs = new ArrayList();

  /**
   * 构造方法
   * @param id int 结点ID
   * @param parent Node 父结点
   */
  Node(int id, Node parent) {
    this.id = id;
    if (parent != null) {
      this.parent = parent;
      parent.childs.add(this);
      this.level = parent.getLevel() + 1;
    }
    else {
      level = 0;
    }
  }

  /**
   * 得到结点ID.
   * @return int 结点ID
   */
  public int getId() {
    return id;
  }

  /**
   * 得到结点在目录树中的层次.
   * 其中根结点为0,根结点的子结点为1,依次类推
   * @return int 结点在目录树中的层次
   */
  final public int getLevel() {
    return level;
  }

  /**
   * 得到结点的值.
   * 也就是TreeNode接口所引用的对象
   * @return Object 结点的值
   */
  final public Object getValue() {
    return value;
  }

  /**
   * 设定结点的值.
   */
  final void setValue(Object value) {
    this.value = value;
  }

  /**
   * 得到子结点列表.
   * Iterator中存储的是Node对象
   * @return Iterator 子结点列表
   */
  final public Iterator getChilds() {
    return childs.iterator();
  }

  /**
   * 得到子结点数量.
   * @return int 子结点数量
   */
  final public int getChildsNumber() {
    return childs.size();
  }

  /**
   * 是否有子结点.
   * @return boolean 有子结点返回true
   */
  final public boolean hasChilds() {
    return childs.size() > 0;
  }

  /**
   * 得到父结点.
   * 如果结点为根结点,返回null
   * @return Node 父结点
   */
  final public Node getParent() {
    return parent;
  }

  /**
   * 得到第level级父结点.
   * @param level int 父结点的层次(level大于等于0,小于此结点的层次)
   * @return Node 第level级父结点
   */
  final public Node getParent(int level) {
    if (level < 0 || level >= this.level) {
      throw new ArrayIndexOutOfBoundsException("level is error.");
    }
    Node n = parent;
    for (int i = 1; i < level; i++) {
      n = n.getParent();
    }
    return n;
  }

  /**
   * 得到结点在同级结点的相对位置.
   * @return int 结点在同级结点的相对位置
   */
  final public int getPosition() {
    if (parent == null) {
      return 0;
    }
    return parent.childs.indexOf(this);
  }

  /**
   * 结点是否是同级结点的最后一个.
   * @return boolean 是返回true
   */
  final public boolean isLast() {
    if (parent == null) {
      return true;
    }
    return getPosition() == parent.childs.size() - 1;
  }

  /**
   * 结点是否同级结点的第一个.
   * @return boolean 是返回true
   */
  final public boolean isFirst() {
    return getPosition() == 0;
  }

  /**
   * 得到目录树中下一个结点.
   * 如果此结点是目录树最后一个结点则返回null
   * @return Node 下一个结点
   */
  final public Node getNext() {
    if (childs.size() > 0) {
      return (Node) childs.get(0);
    }
    Node n = parent;
    while (n != null) {
      Node node = n.getNextSibling();
      if (node != null) {
        return node;
      }
      n = n.getParent();
    }
    return null;
  }

  /**
   * 得到下一个同级结点.
   * 没有下一个同级结点返回null
   * @return Node 下一个同级结点
   */
  final public Node getNextSibling() {
    if (parent == null) {
      return null;
    }
    int k = getPosition();
    if (k == parent.getChildsNumber() - 1) {
      return null;
    }
    return (Node) parent.childs.get(k + 1);
  }

  /**
   * 得到前一个同级结点.
   * 没有前一个同级结点返回null
   * @return Node 前一个同级结点
   */
  final public Node getPreviousSibling() {
    int k = getPosition();
    if (k == 0) {
      return null;
    }
    return (Node) parent.childs.get(k - 1);
  }

  /**
   * 得到前一个结点.
   * 根结点的前一个结点为null
   * @return Node 前一个结点
   */
  final public Node getPrevious() {
    Node n = getPreviousSibling();
    if (n != null) {
      return n;
    }
    return parent;
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -