介绍
深入浅析java中的TreeUtil菜单递归工具类?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
菜单树(详细)
包com.admin.manager.storeService.util; 进口com.admin.manager.storeService.entity.Menu; 进口java.util.ArrayList; 进口并不知道;/* * * @author m * @date 2019/12/16 */公开课TreeUtil {/* * *获取菜单树 * @param菜单所有菜单 * @return */公共静态List
上面这种递归,如果遇到大数据量,效率是极低的,比如前段时间刚实现了省市区镇四层的树结构,面对万5条的数据,竟然120年代才递归完,这也太慢了,将来需求变成了省市区镇乡五层的结构,那不就挂了?
大眼一看,不是跟上面的一样嘛。仔细看拔除();
假设有五万的数据,根节点1万,二级节点1万,三级节点1万,4级节点2万。如果按照上面的逻辑走,每次都要从5万中数据递归查找;而下面的逻辑是找到N级节点并且在总表中删除。假设找到根节点的1万数据,并且把他们从总列表中删除,总列表万剩4条数据,依次这样,到了找4级节点时,总列表就已经万剩2条数据了,总数据量从5万变成了2万,循环次数就少了,效率也就高了
进口com.energy.service.vo.RegionTree; 进口java.util.ArrayList; 进口java.util.Iterator; 进口并不知道;/* * * @author m * @date 2020/4/2 */公开课TreeUtil {/* * *创建树结构 * @param regionTrees * @return */私人List树(List regionTrees) {//返回的节点树 List ,rootNodes=new ArrayList<的在(); Iterator 它=regionTrees.iterator (); 而(it.hasNext ()) { 下=RegionTree it.next ();//父(上级Id)为0的是根节点 如果(“0”;.equals (next.getParentId ())) { rootNodes.add(下); 拔除(); } }//遍历,找到二级节点 (RegionTree RegionTree: rootNodes) { List 孩子=getChild (regionTrees regionTree.getId () .toString ()); regionTree.setChildren(孩子); } 返回rootNodes; }/* * *查子节点 * * @param地区 * @param parentId * @return */私人List getChild (List 地区,字符串parentId) {//子节点列的表 List ,childList=new ArrayList<的在(); Iterator 它=regions.iterator (); 而(it.hasNext ()) { RegionTree RegionTree=it.next (); 如果(parentId.equals (regionTree.getParentId ())) { childList.add (regionTree); 拔除(); } }//遍历递归获取子节点的子节点 (RegionTree RegionTree: childList) { List 孩子=getChild(地区,regionTree.getId () .toString ()); regionTree.setChildren(孩子); }//递归出口childList长度为0 如果(childList.size ()==0) { 返回新ArrayList<在(); } 返回childList; } }
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。