posts - 167,  comments - 30,  trackbacks - 0

          對于梅花雪樹選中節點的刪除:級聯刪除該節點下所有子孫節點

              private List processGetSysFunPointList(String id, TReqSysDTO sysDTO)
                      
          throws ParseException {
                  List rslist 
          = new ArrayList();
                  
          //思路:
                  
          //1,找出當前節點
                  
          //2,找出當前節點的所有直接子節點
                  
          //3,分別找出每個直接子節點的直接子節點
                  
          //4,重復第3步操作,直至找出當前節點的所有子節點
                  
                  
          //算法:
                  
          //1,先找出當前所有最新版本的節點,并封裝成Map[pid,vo]數據結構,以提高算法查找效率。
                  
          //        注: 1)封裝時遍歷采用while循環結構以提高循環效率。
                  
          //            2)封裝時對頂級節點,即父節點為空的節點,不進行封裝處理。
                  
          //            3)封裝結構的結果是:所有的非葉子節點的ID都包含map的keySet集合中;
                  
          //2,根據上面的思路寫遞歸算法來求解當前節點的所有子節點
                  
                  
                  Map map 
          = new HashMap();
                  List list 
          = this.myReqSystemFunctionPointDAO.findAll(sysDTO);
                  
          if(list!=null){
                      Iterator itr 
          = list.iterator();
                      
          while(itr.hasNext()){
                          SysFunTreeNodeVO vo 
          = (SysFunTreeNodeVO)itr.next();
                          
          //找出當前當前節點
                          if(id.equals(vo.getId())){
                              rslist.add(vo);
                          }

                          
          //封裝Map[pid,vo]數據結構,供遞歸算法使用
                          String pid = vo.getParentSysFunPointId();
                          
          if(pid!=null && !pid.equals("")){//過濾頂級節點,頂級節點無需封裝進map結構
                              if(map.containsKey(pid)){
                                  ((List)map.get(pid)).add(vo);
                              }

                              
          else{
                                  List tmp 
          = new ArrayList();
                                  tmp.add(vo);
                                  map.put(pid, tmp);
                              }

                          }

                      }

                  }


                  
          //遞歸算法,找出當前節點的所有子節點
                  List sons = findSons(id, map);
                  
          if(sons!=null){
                      rslist.addAll(sons);
          //添加子節點
                  }

                  
                  
          return rslist;
              }


              
          public List findSons(String id,Map srcmap){
                  List rslist 
          = new ArrayList();
                  
          if(id!=null && srcmap!=null && srcmap.containsKey(id)){
                      
          //找出id的直接子節點。注:不是id的所有子節點,而是其一級子節點
                      List sons = (List) srcmap.get(id);
                      
          if(sons!=null){
                          rslist.addAll(sons);
          //添加直接子節點
                          Iterator itr = sons.iterator();            
                          
          while(itr.hasNext()){//遍歷添加直接子節點的所有子節點
                              SysFunTreeNodeVO vo = (SysFunTreeNodeVO) itr.next();
                              List sonslist 
          = findSons(vo.getId(), srcmap);
                              rslist.addAll(sonslist);
                          }

                      }

                  }

                  
          return rslist;
              }



          //封裝成逗號隔開的串保存
            String fids = "";
            if(filesIdList !=null && filesIdList.size() > 0)
            {
             for(int i =0;i<filesIdList.size();i++)
             {
              fids = fids + filesIdList.get(i);
              if(filesIdList.size() >1 && i!=filesIdList.size()-1)
              {
               fids = fids + ",";
              }
             }
            } 


           

          posted on 2009-12-04 10:50 David1228 閱讀(313) 評論(0)  編輯  收藏 所屬分類: 算法總結

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章檔案

          新聞分類

          新聞檔案

          相冊

          收藏夾

          Java

          Linux知識相關

          Spring相關

          云計算/Linux/虛擬化技術/

          友情博客

          多線程并發編程

          開源技術

          持久層技術相關

          搜索

          •  

          積分與排名

          • 積分 - 359029
          • 排名 - 154

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宕昌县| 临澧县| 宁城县| 根河市| 富蕴县| 炎陵县| 宁都县| 垫江县| 阜南县| 济宁市| 西和县| 高邑县| 兴城市| 德化县| 衡阳市| 龙州县| 罗江县| 金川县| 上林县| 雅江县| 绥江县| 遂宁市| 广宁县| 岳西县| 阿城市| 宜兴市| 湾仔区| 晋宁县| 永安市| 佛坪县| 昭平县| 庄河市| 邻水| 唐山市| 渝中区| 平罗县| 马鞍山市| 杂多县| 松阳县| 潮安县| 夏河县|