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

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

?? tree.java

?? 一個與數據庫進行聯動的JAVA動態樹
?? JAVA
字號:
package fly.tools.tree;

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 ( last.getValue()!=null&&( (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| 国产午夜精品一区二区| 日本一区二区视频在线| 亚洲午夜羞羞片| 丰满白嫩尤物一区二区| 欧美精品久久99久久在免费线| 国产午夜精品久久久久久免费视| 视频在线在亚洲| 97aⅴ精品视频一二三区| 精品999在线播放| 午夜精品福利久久久| 91香蕉视频污| 国产精品久久久久一区二区三区| 美脚の诱脚舐め脚责91| 欧美人牲a欧美精品| 亚洲精品乱码久久久久久 | 一区二区视频在线看| 国产麻豆视频精品| 日韩一区二区高清| 午夜不卡在线视频| 欧美四级电影网| 一区二区三区四区在线播放| 不卡一区中文字幕| 中文字幕第一区二区| 国产综合久久久久久久久久久久| 91麻豆精品国产91久久久久久久久 | 青青草成人在线观看| 欧美写真视频网站| 亚洲尤物在线视频观看| 色妹子一区二区| 亚洲欧美色综合| 91精品福利视频| 一区二区三区高清不卡| 色狠狠一区二区| 亚洲美女淫视频| 欧美伊人久久大香线蕉综合69| 综合在线观看色| 日本久久电影网| 亚洲激情第一区| 欧美日韩精品一区二区三区四区| 亚洲一区二区三区四区在线观看| 欧美自拍丝袜亚洲| 首页国产丝袜综合| 日韩欧美电影在线| 美女精品自拍一二三四| 精品久久久久久最新网址| 韩国三级电影一区二区| 国产欧美一区二区精品性色超碰| 福利电影一区二区| 亚洲欧美自拍偷拍| 欧美日韩三级在线| 老司机午夜精品99久久| 国产亚洲欧美色| 91麻豆高清视频| 日韩不卡在线观看日韩不卡视频| 欧美哺乳videos| 国产91丝袜在线18| 一二三区精品视频| 日韩亚洲欧美一区| 成人av午夜电影| 亚洲一二三专区| 精品国产成人在线影院| 成人精品视频一区| 亚洲成在人线免费| 久久久久久一二三区| 色综合天天性综合| 狠狠色综合播放一区二区| 精品国产乱码久久久久久浪潮| 成人一级片网址| 亚洲国产成人av好男人在线观看| 日韩欧美中文字幕精品| 丁香婷婷综合色啪| 性久久久久久久| 国产欧美日韩视频一区二区| 91久久精品国产91性色tv | 亚洲色图制服诱惑| 日韩精品在线看片z| 91在线视频播放地址| 欧美a级理论片| 亚洲色欲色欲www| 欧美成人精品1314www| 91在线视频播放地址| 麻豆成人免费电影| 亚洲日本在线看| 久久色在线视频| 欧美高清性hdvideosex| 99久久久免费精品国产一区二区| 日本网站在线观看一区二区三区| 国产精品剧情在线亚洲| 欧美变态tickling挠脚心| 色成年激情久久综合| 国产69精品一区二区亚洲孕妇| 日韩精品电影在线观看| 亚洲人成精品久久久久久| 2021国产精品久久精品| 91精品在线麻豆| 欧美无砖专区一中文字| 91丨porny丨户外露出| 成人免费高清在线观看| 黑人精品欧美一区二区蜜桃| 视频一区欧美精品| 亚洲一区二区三区爽爽爽爽爽| 国产精品不卡在线| 国产精品视频免费看| 久久久噜噜噜久久人人看| 精品免费国产一区二区三区四区| 欧美日韩久久久| 欧美午夜精品一区二区三区| 97se亚洲国产综合自在线| 波多野结衣中文字幕一区| 国产成人精品午夜视频免费| 激情综合色播五月| 国产主播一区二区| 美日韩一级片在线观看| 久久精品国产精品青草| 美女在线观看视频一区二区| 日本中文在线一区| 麻豆91小视频| 国产一区欧美一区| 国产成人精品免费| 成人黄色av网站在线| www.日本不卡| 91丨九色丨蝌蚪丨老版| 在线国产亚洲欧美| 欧美精品丝袜中出| 欧美一级淫片007| 久久午夜羞羞影院免费观看| 久久久久久久综合日本| 中文字幕国产一区| 亚洲日本va在线观看| 一区二区三区四区在线播放 | 久久综合久久久久88| 国产欧美一区二区在线观看| 中文字幕av资源一区| 1000精品久久久久久久久| 亚洲一二三区在线观看| 日韩国产欧美三级| 国内外精品视频| 99热精品国产| 欧美日韩国产影片| 精品久久久久香蕉网| 欧美国产日韩在线观看| 一二三区精品视频| 久久超碰97中文字幕| 成人综合在线观看| 欧美丝袜丝交足nylons| 久久众筹精品私拍模特| 日韩毛片高清在线播放| 三级在线观看一区二区| 国产麻豆91精品| 在线国产电影不卡| 久久青草国产手机看片福利盒子| 国产精品不卡视频| 日韩国产精品大片| jizzjizzjizz欧美| 欧美一区二区三区影视| 中文字幕欧美日本乱码一线二线 | 亚洲第一搞黄网站| 国产综合色精品一区二区三区| 不卡一区在线观看| 欧美人与禽zozo性伦| 中文在线一区二区| 久久精品国产99国产| 91同城在线观看| 精品电影一区二区三区| 一级女性全黄久久生活片免费| 国产一区二区三区四区五区美女| 色综合久久88色综合天天| 久久先锋资源网| 香蕉成人伊视频在线观看| 成人网在线免费视频| 日韩精品一区二区三区在线观看 | 91免费版pro下载短视频| 欧美电影免费提供在线观看| 一区二区三区产品免费精品久久75| 久久精品国产亚洲5555| 欧美三区在线视频| 亚洲素人一区二区| 国产不卡在线一区| 欧美岛国在线观看| 日韩成人精品在线| 欧美在线不卡视频| 亚洲色图视频网| 成人黄色国产精品网站大全在线免费观看| 3d动漫精品啪啪一区二区竹菊| 一区二区三区欧美亚洲| 成人性生交大片免费看视频在线| 精品国产一区二区精华| 奇米888四色在线精品| 欧美丰满一区二区免费视频| 有码一区二区三区| 91麻豆自制传媒国产之光| 国产精品理论片| www.久久久久久久久| 中文字幕一区视频| jvid福利写真一区二区三区| 中文字幕免费观看一区| 成人h精品动漫一区二区三区| 久久久99久久精品欧美| 国产伦精品一区二区三区免费 |