首页 > 代码库 > Java创建树形结构算法实例
Java创建树形结构算法实例
在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构。
首先是需要的JavaBean
1 2 3 import java.io.Serializable; 4 import java.util.ArrayList; 5 import java.util.Collections; 6 import java.util.Comparator; 7 import java.util.Date; 8 import java.util.Iterator; 9 import java.util.List; 10 11 /** 12 * <Description> 菜单扩展<br> 13 * 14 * @author lu.wei<br> 15 * @email 1025742048@qq.com <br> 16 * @date 2016年12月19日 <br> 17 * @since V1.0<br> 18 * @see com.luwei.console.mg.entity <br> 19 */ 20 public class MenuExt implements Serializable { 21 22 /** 23 * 菜单ID 24 */ 25 private Long id; 26 27 /** 28 * 菜单名称 29 */ 30 private String name; 31 32 /** 33 * 菜单地址 34 */ 35 private String url; 36 37 /** 38 * 菜单图标 39 */ 40 private String icon; 41 42 /** 43 * 父菜单ID 44 */ 45 private Long parentId; 46 47 /** 48 * 子菜单 49 */ 50 private List<MenuExt> children = new ArrayList<MenuExt>(); 51 52 /** 53 * 菜单顺序 54 */ 55 private Integer ordby; 56 57 /** 58 * 菜单状态 59 */ 60 private String state; 61 62 //省略Getter和Setter 63 64 65 /** 66 * 67 * <Description> 孩子节点排序<br> 68 * 69 * @author lu.wei<br> 70 * @email 1025742048@qq.com <br> 71 * @date 2016年12月22日 下午10:54:26 <br> 72 * <br> 73 */ 74 public void sortChildren() { 75 Collections.sort(children, new Comparator<MenuExt>() { 76 @Override 77 public int compare(MenuExt menu1, MenuExt menu2) { 78 int result = 0; 79 80 Integer ordby1 = menu1.getOrdby(); 81 Integer ordby2 = menu2.getOrdby(); 82 83 Long id1 = menu1.getId(); 84 Long id2 = menu2.getId(); 85 if (null != ordby1 && null != ordby2) { 86 result = (ordby1 < ordby2 ? -1 : (ordby1 == ordby2 ? 0 : 1)); 87 } else { 88 result = (id1 < id2 ? -1 : (id1 == id2 ? 0 : 1)); 89 } 90 return result; 91 } 92 93 }); 94 // 对每个节点的下一层节点进行排序 95 for (Iterator<MenuExt> it = children.iterator(); it.hasNext();) { 96 it.next().sortChildren(); 97 } 98 } 99 100 public List<MenuExt> getChildren() { 101 return children; 102 } 103 104 public void setChildren(List<MenuExt> children) { 105 this.children = children; 106 } 107 }
Java算法
1 public static List<MenuExt> createTreeMenus(List<MenuExt> menus) { 2 List<MenuExt> treeMenus = null; 3 if (null != menus && !menus.isEmpty()) { 4 // 创建根节点 5 MenuExt root = new MenuExt(); 6 root.setName("菜单根目录"); 7 8 // 组装Map数据 9 Map<Long, MenuExt> dataMap = new HashMap<Long, MenuExt>(); 10 for (MenuExt menu : menus) { 11 dataMap.put(menu.getId(), menu); 12 } 13 14 // 组装树形结构 15 Set<Entry<Long, MenuExt>> entrySet = dataMap.entrySet(); 16 for (Entry<Long, MenuExt> entry : entrySet) { 17 MenuExt menu = entry.getValue(); 18 if (null == menu.getParentId() || 0 == menu.getParentId()) { 19 root.getChildren().add(menu); 20 } else { 21 dataMap.get(menu.getParentId()).getChildren().add(menu); 22 } 23 } 24 25 // 对树形结构进行二叉树排序 26 root.sortChildren(); 27 treeMenus = root.getChildren(); 28 } 29 return treeMenus; 30 }
Java创建树形结构算法实例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。