Java樹結構遞歸生成效率低下如何優化?

深度剖析樹結構遞歸優化策略

祖傳代碼中使用遞歸生成樹結構數據,效率低下,本文將針對以下Java代碼片段進行優化,提升樹結構生成效率。

public list<map> creategrouptreenode() {     list<map> childrenlist = new arraylist<map>();     getchildlist(0l,childrenlist);     list<map> treelist = new arraylist<map>();     map map = new hashmap();     map.put("id", 0);     map.put("text","根節點");     map.put("isleaf", "0");     map.put("icon", "fa fa-folder");     map submap = new hashmap();     submap.put("opened", true);     submap.put("selected", true);     map.put("state", submap);     map.put("children", childrenlist);     treelist.add(map);     return treelist;   }  public list<map> getchildlist(long id,list<map> childrenlist){     list<basegroup> childlist = basemapper.childlistbyparentid(id);     if(childlist != null && childlist.size() > 0){         list<map> tempmap = new arraylist<map>();         for(int i = 0; i < childlist.size(); i++){             list<map> mylist = getchildlist(childlist.get(i).getid(),childrenlist);             map map = new hashmap();             if(mylist == null){                 map.put("id", childlist.get(i).getid());                 map.put("text", childlist.get(i).getnumber() + " - " + childlist.get(i).getname());                 map.put("isleaf", "1");                 map.put("icon", "fa fa-folder");                 map submap = new hashmap();                 submap.put("opened", false);                 map.put("state", submap);                 tempmap.add(map);             }else{                 map.put("id", childlist.get(i).getid());                 map.put("text", childlist.get(i).getnumber() + " - " + childlist.get(i).getname());                 map.put("isleaf", "0");                 map.put("icon", "fa fa-folder");                 map.put("children", mylist);                 map submap = new hashmap();                 submap.put("opened", false);                 map.put("state", submap);                 tempmap.add(map);             }             if(id == 0){                 childrenlist.add(map);             }         }         return tempmap;     }     return null; }

這段代碼中getchildlist方法存在效率問題。首先,childrenlist參數作為輸出參數,僅在id == 0l時使用,這導致了不必要的參數傳遞。我們可以直接利用該方法的返回值,移除該參數。

其次,在getchildlist方法的循環中,反復調用childlist.get(i)降低了效率。我們可以引入一個中間變量緩存循環中的元素,或者使用增強型for循環來優化。

最后,在for循環內的if分支中,大部分代碼是相同的,只有isleaf和children字段有所不同,我們可以將重復的代碼提取出來,只處理差異部分。

立即學習Java免費學習筆記(深入)”;

經過優化后的代碼如下:

public List<Map> createGroupTreeNode() {     List<Map> childrenList = getChildList(0L);     // .... }  public List<Map> getChildList(Long id) {     List<BaseGroup> childList = baseMapper.childListByParentId(id);     if(childList != null && childList.size() > 0){         List<Map> tempMap = new ArrayList<Map>();         for (BaseGroup it : childList) {             Map map = new HashMap();             map.put("id", it.getId());             map.put("text", it.getNumber() + " - " + it.getName());             map.put("icon", "fa fa-folder");             Map subMap = new HashMap();             subMap.put("opened", false);             map.put("state", subMap);              List<Map> mylist = getChildList(it.getId());             if (mylist == null) {                 map.put("isleaf", "1");             } else {                 map.put("isleaf", "0");                 map.put("children", mylist);             }             tempMap.add(map);         }         return tempMap;     }     return null; }

通過這些修改,我們簡化了代碼,并提高了代碼的可讀性和效率。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享