亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tree.java

?? 一個目錄樹
?? JAVA
字號:
package com.kewf.dirtree;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;

/**
 * 目錄樹. <br/>
 * 提供由其它對象生成目錄樹的支持。<br/>
 * 如磁盤目錄:Tree t=Tree.getTree(new java.io.File("D:/"),new FileContainer());<br/>
 * XML文件:Document doc=...<br/>
 * Tree t=Tree.getTree(doc,new DocumentContainer());<br/>
 * 如果有File或Document以外的對象要生成目錄樹,請實現{@link TreeNode}或{@link Container}接口。
 * 對于SQL中的表,建議字段要求id(標識)、parentId(上級目錄標識),其它字段自定,然后對查詢到的每一
 * 條記錄生成一個實現TreeNode接口的對象。
 * 如果實現了TreeNode接口:<br/>
 *   class Group implements TreeNode{}<br/>
 *   Group[] groups=...<br/>
 *   Tree t=Tree.getTree(groups,0);//其中0為根結點的ID<br/>,并且groups不要求是同一對象,只要它們都實現了
 * 接口TreeNode,并且ID不同,這樣可以在生成目錄樹的過程中根據對象類型自行處理。
 * <p>Copyright: Copyright (c) 2004</p>
 * <p> </p>
 * @author flyxxxxx
 * @version 1.0
 */
final public class Tree
    extends Node {
  /**
   * 結點最大標識
   */
  private static int maxId = 0;

  private Tree() {
    super(getMaxId(), null);
  }

  private Tree(int id) {
    super(id, null);
    maxId = id++;
  }

  private static int getMaxId() {
    return maxId++;
  }

  /**
   * 創建空目錄樹.
   * @return Tree 空目錄樹
   */
  public static Tree getTree() {
    return new Tree();
  }

  /**
   * 向目錄樹添加一個結點.
   * 目錄樹中所有結點的類型最好是相同的。
   * @param parent Node 父結點
   * @param value Object 結點的值
   * @return Node 添加的結點
   */
  public Node addNode(Node parent, Object value) {
    Node rs = new Node(getMaxId(), parent);
    rs.setValue(value);
    return rs;
  }

  /**
   * 創建目錄樹.
   * 如果對象實現了接口{@link Container},可以通過此方法加入目錄樹。<br/>
   * 通過此方法創建的目錄樹,所有結點的ID由系統生成。obj將直接做為根結點,對根結點調用方法
   * {@link Node#getValue()}將得到obj。<br/>
   * @param obj Object 目錄樹的根結點
   * @param container Container 得到對象的子對象的接口
   * @return Tree 目錄樹
   */
  public static Tree getTree(Object obj, Container container) {
    Tree rs = new Tree();
    rs.setValue(obj);
    Object[] o = container.getChilds(obj);
    for (int i = 0; i < o.length; i++) {
      addNode(rs, o[i], container);
    }
    return rs;
  }

  private static void addNode(Node n, Object obj, Container container) {
    Node node = new Node(getMaxId(), n);
    node.setValue(obj);
    Object[] o = container.getChilds(obj);
    for (int i = 0; i < o.length; i++) {
      addNode(node, o[i], container);
    }
  }

  /**
   * 創建目錄樹.
   * 如果對象實現了接口{@link Container},可以通過此方法加入目錄樹。<br/>
   * 通過此方法創建的目錄樹,所有結點的ID由系統生成,對根結點調用方法{@link Node#getValue()}
   * 將得到null。<br/>
   * obj數組中的每一個,將直接做為根結點的直接子結點。
   * @param obj Object 目錄樹的根結點的直接子結點.
   * @param container Container 得到對象的子對象的接口
   * @return Tree 目錄樹
   */
  public static Tree getTree(Object obj[], Container container) {
    Tree rs = new Tree();
    for (int i = 0; i < obj.length; i++) {
      addNode(rs, obj[i], container);
    }
    return rs;
  }

  /**
   * 創建目錄樹.
   * 只要一組對象實現接口{@link TreeNode},并且每個對象的ID不同,就可以將它們加入目錄樹。<br/>
   * 通過此方法得到的目錄樹,它的根結點ID值為rootId,其它結點的值為實現接口TreeNode的對象的ID。<br/>
   * 如果treeNode中包含了根結點,根結點的值可以通過方法{@link Node#getValue()}得到,返之得到的是null。<br/>
   * treeNode可以沒有順序,但父結點的ID一定大于子結點的。
   * @param treeNode TreeNode[] 構成目錄樹的結點
   * @param rootId int 根結點的ID
   * @return Tree 創建目錄樹
   */
  public static Tree getTree(TreeNode[] treeNode, int rootId) {
    Tree rs = new Tree(rootId);
    ArrayList list = new ArrayList();
    for (int i = 0; i < treeNode.length; i++) {
      list.add(treeNode[i]);
    }
    Collections.sort(list, new Compare()); //排序
    Node last = rs;
    for (int i = 0; i < treeNode.length; i++) {
      TreeNode tnode = (TreeNode) list.get(i);
      if (i == 0 && tnode.getId() == rootId) { //是否根結點
        rs.setValue(tnode);
      }
      else {
        Node parent = null; //尋找父結點
        if ( ( (TreeNode) last.getValue()).getId() == tnode.getParentId()) {
          parent = last;
        }
        else {
          parent = rs.getNode(tnode.getParentId());
        }
        if (parent == null) { //未找到
          throw new NullPointerException("Node " + tnode.getParentId() +
                                         " not found.");
        }
        else { //找到
          Node n = new Node(tnode.getId(), parent);
          n.setValue(tnode);
          last = parent;
        }
      }
    }
    return rs;
  }

  /**
   * 從目錄樹中查找標識為id的結點.
   * @param id String 結點標識
   * @return Node 標識為id的結點(未找到返回null)
   */
  public Node getNode(int id) {
    if (id == getId()) {
      return this;
    }
    return getNode(getChilds(), id);
  }

  private static Node getNode(Iterator it, int id) { //查找結點
    while (it.hasNext()) {
      Node n = (Node) it.next();
      if (n.getId() == id) {
        return n;
      }
      if (n.getChildsNumber() > 0) {
        n = getNode(n.getChilds(), id);
        if (n != null) {
          return n;
        }
      }
    }
    return null;
  }

  /**
   * 對目錄樹進行排序
   * @param com Comparator 排序接口
   */
  public void sort(Comparator com) {
    sort(childs, com);
  }

  private void sort(ArrayList childs, Comparator com) { //對子結點排序
    Collections.sort(childs, com);
    for (int i = 0; i < childs.size(); i++) {
      Node n = (Node) childs.get(i);
      if (n.getChildsNumber() > 1) {
        sort(n.childs, com);
      }
    }
  }

  /**
   * 得到滿足條件的結點列表.
   * @param filter NodeFilter 結點過濾器
   * @return Iterator 結點列表(存儲Node對象)
   */
  public Iterator getNodeList(NodeFilter filter) {
    ArrayList rs = new ArrayList();
    getNodeList(childs, filter, rs);
    return rs.iterator();
  }

  private void getNodeList(ArrayList childs, NodeFilter filter,
                           ArrayList rs) { //檢索滿足條件的結點
    for (int i = 0; i < childs.size(); i++) {
      Node n = (Node) childs.get(i);
      if (filter.accept(n)) {
        rs.add(n);
      }
      if (n.hasChilds()) {
        getNodeList(n.childs, filter, rs);
      }
    }
  }

}

class Compare
    implements Comparator { //對結點按ID排序
  public Compare() {}

  public int compare(Object obj1, Object obj2) {
    int id1 = ( (TreeNode) obj1).getId();
    int id2 = ( (TreeNode) obj2).getId();
    return id1 - id2;
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
全部av―极品视觉盛宴亚洲| 久久精品国产**网站演员| 亚洲女女做受ⅹxx高潮| 亚洲成人精品在线观看| 成人av网站免费观看| 日韩欧美国产不卡| 一区二区三区中文免费| 成人一区二区视频| 精品国产乱码久久久久久浪潮| 亚洲欧美精品午睡沙发| 国产不卡视频一区| 精品电影一区二区三区| 天堂成人国产精品一区| 日本道免费精品一区二区三区| 久久精品综合网| 日韩高清一区在线| 在线观看91av| 午夜精品影院在线观看| 欧美图区在线视频| 亚洲一区二区三区四区在线免费观看| 国产成人av在线影院| 久久久久国产一区二区三区四区| 日韩成人免费电影| 91精品黄色片免费大全| 日韩在线播放一区二区| 欧美精品第一页| 视频一区二区三区中文字幕| 欧美日韩在线综合| 午夜在线电影亚洲一区| 欧美日韩视频一区二区| 亚洲国产sm捆绑调教视频 | 亚洲欧洲精品一区二区三区 | 91麻豆免费看| 成人欧美一区二区三区1314 | 欧美一区三区二区| 免费一级片91| 日韩一级成人av| 精品一区二区免费视频| 久久久久久久综合色一本| 国产乱人伦偷精品视频免下载| 久久久久久久久伊人| 成人av影视在线观看| 1区2区3区国产精品| 91福利在线观看| 日韩综合在线视频| 91精品免费在线| 国精产品一区一区三区mba桃花 | xvideos.蜜桃一区二区| 国产ts人妖一区二区| 最新国产の精品合集bt伙计| 欧美唯美清纯偷拍| 老司机精品视频导航| 欧美国产日本视频| 91蜜桃视频在线| 日韩国产成人精品| 日本一区二区视频在线| 91丨九色丨蝌蚪富婆spa| 亚洲午夜国产一区99re久久| 精品伦理精品一区| 色婷婷久久久久swag精品| 五月婷婷综合网| 中文字幕亚洲在| 在线视频综合导航| 精品综合久久久久久8888| 亚洲欧美一区二区视频| 欧美中文字幕亚洲一区二区va在线| 美女脱光内衣内裤视频久久网站| 国产日产亚洲精品系列| 色国产综合视频| 国产精品亚洲成人| 亚洲mv在线观看| 国产精品区一区二区三| 欧美日韩成人一区二区| 成人午夜免费av| 天天色天天操综合| 国产精品国产三级国产普通话99 | 精品一区二区影视| 亚洲欧美日韩在线| 精品精品国产高清a毛片牛牛| 99精品视频免费在线观看| 久久se精品一区精品二区| 亚洲精品网站在线观看| 久久人人爽爽爽人久久久| 欧美日韩一区在线| 国产99久久久国产精品潘金网站| 午夜久久福利影院| 亚洲精品视频一区| 国产精品日日摸夜夜摸av| 日韩欧美色综合网站| 欧美日韩国产影片| 91美女片黄在线观看91美女| 福利一区二区在线观看| 狠狠色狠狠色综合系列| 日韩精品乱码av一区二区| 一卡二卡三卡日韩欧美| 亚洲色图丝袜美腿| 国产欧美一区二区精品婷婷| 日韩视频一区二区三区在线播放| 在线观看一区日韩| 99久久99久久综合| www.日韩av| 成人av一区二区三区| 成人午夜精品在线| 国产91丝袜在线18| 国产精品一区二区三区乱码| 久久99精品国产麻豆婷婷洗澡| 日韩电影在线看| 免费日韩伦理电影| 亚洲国产精品综合小说图片区| 亚洲欧洲制服丝袜| 亚洲精品少妇30p| 一区二区免费在线播放| 亚洲综合免费观看高清完整版| 亚洲免费观看高清| 一区av在线播放| 无码av免费一区二区三区试看 | 日韩亚洲欧美在线| 56国语精品自产拍在线观看| 91精品国产高清一区二区三区| 欧美日韩国产精选| 日韩一二三区视频| 精品区一区二区| 国产色产综合产在线视频| 久久精品视频一区二区三区| 国产拍揄自揄精品视频麻豆| 国产精品美日韩| 亚洲激情综合网| 日韩精品一区第一页| 免费成人你懂的| 高清不卡一区二区在线| 色狠狠色狠狠综合| 91精品国产综合久久福利软件| 2欧美一区二区三区在线观看视频| 国产日韩欧美在线一区| 亚洲乱码国产乱码精品精小说 | 日韩精品电影一区亚洲| 久久99日本精品| 成人福利视频在线| 欧美三级视频在线观看| 精品国产乱码久久久久久浪潮 | 欧美午夜视频网站| 精品奇米国产一区二区三区| 中文字幕一区av| 偷拍一区二区三区| 国产盗摄精品一区二区三区在线 | 一区二区三区欧美| 免费高清视频精品| 99久久免费视频.com| 欧美理论片在线| 亚洲国产高清aⅴ视频| 五月婷婷久久丁香| 国产福利91精品| 在线成人午夜影院| 国产精品嫩草99a| 日韩黄色免费网站| 99久久精品99国产精品| 欧美一区二区免费视频| 最新国产の精品合集bt伙计| 男男成人高潮片免费网站| 成人动漫av在线| 26uuu亚洲综合色| 亚洲成人激情综合网| av一区二区久久| 欧美精品一区二区三区在线 | 五月婷婷综合在线| 成人丝袜视频网| 日韩一区二区在线看片| 亚洲狼人国产精品| 国产精品一线二线三线| 欧美一卡二卡三卡| 一区二区三区中文字幕| 成人久久18免费网站麻豆 | 亚洲成精国产精品女| 白白色 亚洲乱淫| 亚洲精品在线免费观看视频| 香港成人在线视频| 欧洲精品一区二区三区在线观看| 国产区在线观看成人精品| 九九精品一区二区| 欧美高清激情brazzers| 亚洲一区视频在线观看视频| jiyouzz国产精品久久| 久久精品人人做人人综合| 日韩中文字幕区一区有砖一区| 欧美影视一区二区三区| 亚洲免费观看高清在线观看| 成人福利电影精品一区二区在线观看| 精品av久久707| 久久99精品久久久久| 日韩亚洲欧美高清| 喷水一区二区三区| 日韩午夜在线影院| 日韩电影免费在线| 日韩三级在线观看| 日本91福利区| 日韩视频在线观看一区二区| 麻豆国产欧美一区二区三区| 日韩一区二区三区在线观看| 美女脱光内衣内裤视频久久网站| 欧美一级高清片|