<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
    //級(jí)聯(lián)數(shù)據(jù)的樹狀存儲(chǔ)結(jié)構(gòu)HashMap實(shí)現(xiàn)

    /**
     * 
     
    */
    package test;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;

    /**
     * 
    @author Daniel Cao
     * @date 2007-4-26
     * @time 上午12:20:44
     * 
     
    */
    public class TestSortGroup {

     
    /**
      * 
    @param args
      
    */
     
    public static void main(String[] args) {
      TestSortGroup test 
    = new TestSortGroup();
      Map
    <Long, GroupNode> map = test.getGroupList1();
      System.out.println(
    "ok");
     }

     
    private List<Group> makeList() {
      List
    <Group> totalList = new ArrayList<Group>();
      Group g1 
    = new Group();
      g1.setId(
    1L);
      g1.setName(
    "a1");
      g1.setParentId(
    0L);
      totalList.add(g1);
      Group g2 
    = new Group();
      g2.setId(
    2L);
      g2.setName(
    "a2");
      g2.setParentId(
    1L);
      totalList.add(g2);
      Group g3 
    = new Group();
      g3.setId(
    3L);
      g3.setName(
    "a3");
      g3.setParentId(
    0L);
      totalList.add(g3);
      Group g4 
    = new Group();
      g4.setId(
    4L);
      g4.setName(
    "a4");
      g4.setParentId(
    1L);
      totalList.add(g4);
      Group g5 
    = new Group();
      g5.setId(
    5L);
      g5.setName(
    "a5");
      g5.setParentId(
    2L);
      totalList.add(g5);
      Group g6 
    = new Group();
      g6.setId(
    6L);
      g6.setName(
    "a6");
      g6.setParentId(
    2L);
      totalList.add(g6);
      Group g7 
    = new Group();
      g7.setId(
    7L);
      g7.setName(
    "a7");
      g7.setParentId(
    3L);
      totalList.add(g7);

      
    return totalList;
     }

     
    public Map<Long, GroupNode> getGroupList() {//針對(duì)3層
      List<Group> totalList = makeList();
      
    // 第1層
      Map<Long, GroupNode> lvl1Map = new HashMap<Long, GroupNode>();
      
    for (Group group : totalList) {
       Long id 
    = group.getId();
       Long pId 
    = group.getParentId();
       
    if (pId == 0) {
        GroupNode gn 
    = new GroupNode();
        gn.setId(id);
        gn.setMember(group);
        lvl1Map.put(id, gn);
       }
      }
      
    // 第2層
      Map<Long, GroupNode> lvl2Map = new HashMap<Long, GroupNode>();
      
    for (Group group : totalList) {
       Long id 
    = group.getId();
       Long pId 
    = group.getParentId();
       
    if (lvl1Map.containsKey(pId)) {
        GroupNode gn 
    = new GroupNode();
        gn.setId(id);
        gn.setMember(group);
        lvl2Map.put(id, gn);
       }
      }
      
    // 第3層
      Map<Long, GroupNode> lvl3Map = new HashMap<Long, GroupNode>();
      
    for (Group group : totalList) {
       Long id 
    = group.getId();
       Long pId 
    = group.getParentId();
       
    if (lvl2Map.containsKey(pId)) {
        GroupNode gn 
    = new GroupNode();
        gn.setId(id);
        gn.setMember(group);
        lvl3Map.put(id, gn);
       }
      }
      
    // 先把2、3層拼起來
      for (Entry<Long, GroupNode> entry : lvl3Map.entrySet()) {
       Long id 
    = entry.getKey();
       GroupNode node 
    = entry.getValue();
       Long pId 
    = node.getMember().getParentId();
       
    if (lvl2Map.containsKey(pId)) {
        GroupNode parent 
    = lvl2Map.get(pId);
        Map
    <Long, GroupNode> son = parent.getSon();
        
    if (son == null) {
         son 
    = new HashMap<Long, GroupNode>();
        }
        son.put(id, node);
        parent.setSon(son);
        lvl2Map.put(pId, parent);
       }
      }
      
    // 再把1、2層拼起來
      for (Entry<Long, GroupNode> entry : lvl2Map.entrySet()) {
       Long id 
    = entry.getKey();
       GroupNode node 
    = entry.getValue();
       Long pId 
    = node.getMember().getParentId();
       
    if (lvl1Map.containsKey(pId)) {
        GroupNode parent 
    = lvl1Map.get(pId);
        Map
    <Long, GroupNode> son = parent.getSon();
        
    if (son == null) {
         son 
    = new HashMap<Long, GroupNode>();
        }
        son.put(id, node);
        parent.setSon(son);
        lvl1Map.put(pId, parent);
       }
      }

      
    return lvl1Map;
     }

     
    public Map<Long, GroupNode> getGroupList1() {//無限層的實(shí)現(xiàn)
      List<Group> totalList = makeList();
      
    //保存所有層數(shù)據(jù)
      List<Map<Long, GroupNode>> lvlList = new ArrayList<Map<Long, GroupNode>>();
      
    //前一層
      Map<Long, GroupNode> lastLlvlMap = null;
      
    while (totalList!= null && !totalList.isEmpty()) {
       
    //當(dāng)前層數(shù)據(jù)
       Map<Long, GroupNode> lvlMap = new HashMap<Long, GroupNode>();
       List
    <Group> tmpList = new ArrayList<Group>();
       
    for (Group group : totalList) {
        Long id 
    = group.getId();
        Long pId 
    = group.getParentId();
        
    if (pId == 0) {
         GroupNode gn 
    = new GroupNode();
         gn.setId(id);
         gn.setMember(group);
         lvlMap.put(id, gn);
         tmpList.add(group);
        } 
    else if (lastLlvlMap != null && lastLlvlMap.containsKey(pId)) {
         GroupNode gn 
    = new GroupNode();
         gn.setId(id);
         gn.setMember(group);
         lvlMap.put(id, gn);
         tmpList.add(group);
        }
       }
       totalList.removeAll(tmpList);
       lvlList.add(lvlMap);
       lastLlvlMap 
    = lvlMap;
      }
      
      
    int size = lvlList.size();
      
    if (size == 0){
       
    return new HashMap<Long, GroupNode>();
      }
      
    if (size == 1){
       
    return lvlList.get(0);
      }
      
    //從最后一層向前歸并
      Map<Long, GroupNode> lastLvlMap = lvlList.get(size - 1);
      
    for (int i = size-2; i >= 0; i --){
       Map
    <Long, GroupNode> currentLvlMap = lvlList.get(i);
       
    for (Entry<Long, GroupNode> entry : lastLvlMap.entrySet()) {
        Long id 
    = entry.getKey();
        GroupNode node 
    = entry.getValue();
        Long pId 
    = node.getMember().getParentId();
        
    if (currentLvlMap.containsKey(pId)) {
         GroupNode parent 
    = currentLvlMap.get(pId);
         Map
    <Long, GroupNode> son = parent.getSon();
         
    if (son == null) {
          son 
    = new HashMap<Long, GroupNode>();
         }
         son.put(id, node);
         parent.setSon(son);
         currentLvlMap.put(pId, parent);
        }
       }
       lastLvlMap 
    = currentLvlMap;
      }
      System.out.println(lastLvlMap.size());
      
      
    return lastLvlMap;
     }
    }


    posted on 2007-10-09 08:49 蘆葦 閱讀(1344) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA
    主站蜘蛛池模板: 久久久久久久尹人综合网亚洲 | 亚洲动漫精品无码av天堂| 91成人免费观看在线观看| 亚洲国产精品久久久久| 在线播放免费人成视频在线观看| 美女被免费网站在线视频免费| 亚洲国产精品无码久久久不卡| 久久笫一福利免费导航| 国产亚洲日韩在线a不卡| 婷婷久久久亚洲欧洲日产国码AV| 成人毛片免费观看视频大全| 免费福利资源站在线视频| 亚洲成人午夜在线| 免费一级毛片女人图片| 99re6热视频精品免费观看| 国产亚洲福利精品一区二区| 亚洲精品中文字幕乱码影院| 亚洲第一网站男人都懂| 国产大片线上免费观看| 中国内地毛片免费高清| 亚洲精品理论电影在线观看 | 亚洲欧洲精品一区二区三区| 免费人成在线观看播放国产| 亚欧免费视频一区二区三区 | 国产jizzjizz免费视频| 91香蕉在线观看免费高清| 日韩精品免费一线在线观看| 亚洲另类小说图片| 亚洲国产精品成人久久| 免费欧洲美女牲交视频| 一二三四在线播放免费观看中文版视频 | 最近免费中文字幕mv电影| aa午夜免费剧场| 久久久久久久久无码精品亚洲日韩| 亚洲天堂一区二区| 国内精品99亚洲免费高清| 国产成人高清精品免费软件| 91香蕉视频免费| 亚洲精品视频免费看| 无码日韩精品一区二区免费暖暖| 一级视频免费观看|