Java创建树形结构算法实例
来源:互联网 发布:nba张伯伦数据 编辑:程序博客网 时间:2024/05/21 04:44
在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 }
阅读全文
0 0
- Java创建树形结构算法实例
- java树形结构 算法
- JAVA 树形结构程序事件实例
- java树形结构 两种算法
- Java递归算法构造JSON树形结构
- 利用TreeView动态创建一个树形结构-简单实例 .Net
- 数据结构-树形结构实例
- C#创建树形结构
- 算法之树形结构
- js实现树形结构实例
- 递归算法结合数据库解析成java树形结构
- 使用递归算法结合数据库解析成java树形结构
- 使用递归算法结合数据库解析成java树形结构
- 使用递归算法结合数据库解析成java树形结构
- 使用递归算法结合数据库解析成java树形结构
- 使用递归算法结合数据库解析成java树形结构
- 用递归算法得到Java的树形结构
- 使用递归算法结合数据库解析成java树形结构
- 深度学习DeepLearning.ai系列课程学习总结:6. 具有一个隐藏层的平面数据分类代码实战
- QButtonGroup结合QSS实现互斥按钮颜色变化
- ubuntu下使用apt-file来安装texlive的package
- Tree Traversals
- c/c++ #define中#和##运算符的使用
- Java创建树形结构算法实例
- 莫队算法学习报告
- Error:(115) *** Android NDK: Aborting . Stop.
- 怎样安装VLC到CentOS7
- 九度1084 整数 拆分
- 三篇文章,理解python类中的方法所需要的参数 self
- 细说display属性
- Android 高德地图基本配置
- 动态代理的简单阐述