java TreeUtil菜单递归工具类
本文实例为大家分享了javaTreeUtil菜单递归工具类的具体代码,供大家参考,具体内容如下
菜单树(详细)
packagecom.admin.manager.storeService.util;
importcom.admin.manager.storeService.entity.Menu;
importjava.util.ArrayList;
importjava.util.List;
/**
*@authorm
*@date2019/12/16
*/
publicclassTreeUtil{
/**
*获取菜单树
*@parammenus所有菜单
*@return
*/
publicstaticList
上面这种递归,如果遇到大数据量,效率是极低的。比如前段时间刚实现了省市区镇四层的树结构,面对5万条的数据,竟然120s才递归完,这也太慢了,将来需求变成了省市区镇乡五层的结构,那不就挂了?
大眼一看,不是跟上面的一样嘛。仔细看it.remove();
假设有五万的数据,根节点1万,二级节点1万,三级节点1万,4级节点2万。如果按照上面的逻辑走,每次都要从5万中数据递归查找;而下面的逻辑是找到N级节点并且在总list中删除。假设找到根节点的1万数据,并且把他们从总list中删除,总list剩4万条数据,依次这样,到了找4级节点时,总list就已经剩2万条数据了,总数据量从5万变成了2万,循环次数就少了,效率也就高了
importcom.energy.service.vo.RegionTree;
importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;
/**
*@authorm
*@date2020/4/2
*/
publicclassTreeUtil{
/**
*创建树结构
*@paramregionTrees
*@return
*/
privateListtree(ListregionTrees){
//返回的节点树
ListrootNodes=newArrayList<>();
Iteratorit=regionTrees.iterator();
while(it.hasNext()){
RegionTreenext=it.next();
//parent(上级Id)为0的是根节点
if("0".equals(next.getParentId())){
rootNodes.add(next);
it.remove();
}
}
//遍历,找到二级节点
for(RegionTreeregionTree:rootNodes){
Listchild=getChild(regionTrees,regionTree.getId().toString());
regionTree.setChildren(child);
}
returnrootNodes;
}
/**
*查子节点
*
*@paramregions
*@paramparentId
*@return
*/
privateListgetChild(Listregions,StringparentId){
//子节点列表
ListchildList=newArrayList<>();
Iteratorit=regions.iterator();
while(it.hasNext()){
RegionTreeregionTree=it.next();
if(parentId.equals(regionTree.getParentId())){
childList.add(regionTree);
it.remove();
}
}
//遍历递归获取子节点的子节点
for(RegionTreeregionTree:childList){
Listchild=getChild(regions,regionTree.getId().toString());
regionTree.setChildren(child);
}
//递归出口childList长度为0
if(childList.size()==0){
returnnewArrayList<>();
}
returnchildList;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。