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

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

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

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
    //級聯數據的樹狀存儲結構HashMap實現

    /**
     * 
     
    */
    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() {//針對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() {//無限層的實現
      List<Group> totalList = makeList();
      
    //保存所有層數據
      List<Map<Long, GroupNode>> lvlList = new ArrayList<Map<Long, GroupNode>>();
      
    //前一層
      Map<Long, GroupNode> lastLlvlMap = null;
      
    while (totalList!= null && !totalList.isEmpty()) {
       
    //當前層數據
       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) 評論(0)  編輯  收藏 所屬分類: JAVA
    主站蜘蛛池模板: 亚洲成AV人网址| 亚洲性日韩精品国产一区二区| 亚洲成a人片在线观看无码| 男人j进女人p免费视频| 免费一看一级毛片全播放| 亚洲a∨无码一区二区| 2020天堂在线亚洲精品专区| 日韩在线不卡免费视频一区| 亚洲AV永久青草无码精品| 久久久久久久99精品免费观看| 亚洲精品无码午夜福利中文字幕 | 久久99精品视免费看| 亚洲av无码一区二区三区不卡 | 亚洲国产精品成人| 一级特级女人18毛片免费视频| 亚洲VA综合VA国产产VA中| 精品一区二区三区高清免费观看| 亚洲日韩国产一区二区三区| 国产免费黄色无码视频| 亚洲国产精品无码成人片久久| 一级毛片**不卡免费播| 久久久亚洲AV波多野结衣| 和日本免费不卡在线v| 亚洲成av人片在www鸭子| 亚洲国产精品无码久久久久久曰| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 久久久久久久亚洲Av无码| 中文字幕免费在线看线人| 亚洲老熟女五十路老熟女bbw| 免费在线观看日韩| 中文字幕无码日韩专区免费| 亚洲欧洲日韩在线电影| 国产美女无遮挡免费视频| 国产精品免费大片一区二区| 亚洲伦理一区二区| 成人最新午夜免费视频| 国产成人无码免费网站| 亚洲日本国产精华液| 国产三级免费观看| 99久久免费国产特黄| 色久悠悠婷婷综合在线亚洲|