<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
    主站蜘蛛池模板: 内射少妇36P亚洲区| 亚洲成AV人片在| 亚洲av无码一区二区三区天堂| 色影音免费色资源| 亚洲最大黄色网址| 亚洲综合免费视频| 亚洲最新黄色网址| 18国产精品白浆在线观看免费| 亚洲黄色在线播放| 亚洲一区免费在线观看| 亚洲日本乱码一区二区在线二产线| 99热在线观看免费| 亚洲综合视频在线| 久草视频免费在线观看| 亚洲影院天堂中文av色| 夜夜嘿视频免费看| 边摸边吃奶边做爽免费视频网站| www亚洲一级视频com| 成人黄动漫画免费网站视频 | 国产成人涩涩涩视频在线观看免费 | 99视频有精品视频免费观看| 久久亚洲国产伦理| 亚洲免费视频播放| 亚洲成AV人影片在线观看| va亚洲va日韩不卡在线观看| 久久国产免费直播| 亚洲最大成人网色| 成全高清视频免费观看| 一级毛片免费不卡直观看| 久久精品国产亚洲麻豆| 中文字幕无码播放免费| 色欲aⅴ亚洲情无码AV| 日韩亚洲变态另类中文| 999在线视频精品免费播放观看 | 久久国产免费一区| 亚洲色大成网站www久久九| 亚洲第一永久AV网站久久精品男人的天堂AV| 中文字幕不卡免费视频| 国产成人精品日本亚洲18图| 国产一区在线观看免费| 久久精品成人免费看|