Java创建树形结构算法实例代码
在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构。
首先是需要的JavaBean
importjava.io.Serializable; importjava.util.ArrayList; importjava.util.Collections; importjava.util.Comparator; importjava.util.Date; importjava.util.Iterator; importjava.util.List; /** *<Description>菜单扩展<br> */ publicclassMenuExtimplementsSerializable{ /** *菜单ID */ privateLongid; /** *菜单名称 */ privateStringname; /** *菜单地址 */ privateStringurl; /** *菜单图标 */ privateStringicon; /** *父菜单ID */ privateLongparentId; /** *子菜单 */ privateList<MenuExt>children=newArrayList<MenuExt>(); /** *菜单顺序 */ privateIntegerordby; /** *菜单状态 */ privateStringstate; //省略Getter和Setter /** * *<Description>孩子节点排序<br> * */ publicvoidsortChildren(){ Collections.sort(children,newComparator<MenuExt>(){ @Override publicintcompare(MenuExtmenu1,MenuExtmenu2){ intresult=0; Integerordby1=menu1.getOrdby(); Integerordby2=menu2.getOrdby(); Longid1=menu1.getId(); Longid2=menu2.getId(); if(null!=ordby1&&null!=ordby2){ result=(ordby1<ordby2?-1:(ordby1==ordby2?0:1)); }else{ result=(id1<id2?-1:(id1==id2?0:1)); } returnresult; } }); //对每个节点的下一层节点进行排序 for(Iterator<MenuExt>it=children.iterator();it.hasNext();){ it.next().sortChildren(); } } publicList<MenuExt>getChildren(){ returnchildren; } publicvoidsetChildren(List<MenuExt>children){ this.children=children; } }
Java算法
publicstaticList<MenuExt>createTreeMenus(List<MenuExt>menus){ List<MenuExt>treeMenus=null; if(null!=menus&&!menus.isEmpty()){ //创建根节点 MenuExtroot=newMenuExt(); root.setName("菜单根目录"); //组装Map数据 Map<Long,MenuExt>dataMap=newHashMap<Long,MenuExt>(); for(MenuExtmenu:menus){ dataMap.put(menu.getId(),menu); } //组装树形结构 Set<Entry<Long,MenuExt>>entrySet=dataMap.entrySet(); for(Entry<Long,MenuExt>entry:entrySet){ MenuExtmenu=entry.getValue(); if(null==menu.getParentId()||0==menu.getParentId()){ root.getChildren().add(menu); }else{ dataMap.get(menu.getParentId()).getChildren().add(menu); } } //对树形结构进行二叉树排序 root.sortChildren(); treeMenus=root.getChildren(); } returntreeMenus; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。