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  *  菜单扩展
13 * 14 * @author lu.wei
15 * @email [email protected]
16 * @date 2016年12月19日
17 * @since V1.0
18 * @see com.luwei.console.mg.entity
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 children = new ArrayList(); 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 * 孩子节点排序
68 * 69 * @author lu.wei
70 * @email [email protected]
71 * @date 2016年12月22日 下午10:54:26
72 *
73 */ 74 public void sortChildren() { 75 Collections.sort(children, new Comparator() { 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 it = children.iterator(); it.hasNext();) { 96 it.next().sortChildren(); 97 } 98 } 99 100 public List getChildren() { 101 return children; 102 } 103 104 public void setChildren(List children) { 105 this.children = children; 106 } 107 }
复制代码

 

Java算法

复制代码
 1 public static List createTreeMenus(List menus) {
 2         List treeMenus = null;
 3         if (null != menus && !menus.isEmpty()) {
 4             // 创建根节点
 5             MenuExt root = new MenuExt();
 6             root.setName("菜单根目录");
 7 
 8             // 组装Map数据
 9             Map dataMap = new HashMap();
10             for (MenuExt menu : menus) {
11                 dataMap.put(menu.getId(), menu);
12             }
13 
14             // 组装树形结构
15             Set> entrySet = dataMap.entrySet();
16             for (Entry 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     }
复制代码

转载于:https://www.cnblogs.com/Darkqueen/p/9165659.html

你可能感兴趣的:(Java创建树形结构算法实例)