Java创建树形结构算法实例代码
作者:路伟 时间:2021-11-21 22:24:01
在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构。
首先是需要的JavaBean
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
/**
* <Description> 菜单扩展<br>
*/
public class MenuExt implements Serializable {
/**
* 菜单ID
*/
private Long id;
/**
* 菜单名称
*/
private String name;
/**
* 菜单地址
*/
private String url;
/**
* 菜单图标
*/
private String icon;
/**
* 父菜单ID
*/
private Long parentId;
/**
* 子菜单
*/
private List<MenuExt> children = new ArrayList<MenuExt>();
/**
* 菜单顺序
*/
private Integer ordby;
/**
* 菜单状态
*/
private String state;
//省略Getter和Setter
/**
*
* <Description> 孩子节点排序<br>
*
*/
public void sortChildren() {
Collections.sort(children, new Comparator<MenuExt>() {
@Override
public int compare(MenuExt menu1, MenuExt menu2) {
int result = 0;
Integer ordby1 = menu1.getOrdby();
Integer ordby2 = menu2.getOrdby();
Long id1 = menu1.getId();
Long id2 = menu2.getId();
if (null != ordby1 && null != ordby2) {
result = (ordby1 < ordby2 ? -1 : (ordby1 == ordby2 ? 0 : 1));
} else {
result = (id1 < id2 ? -1 : (id1 == id2 ? 0 : 1));
}
return result;
}
});
// 对每个节点的下一层节点进行排序
for (Iterator<MenuExt> it = children.iterator(); it.hasNext();) {
it.next().sortChildren();
}
}
public List<MenuExt> getChildren() {
return children;
}
public void setChildren(List<MenuExt> children) {
this.children = children;
}
}
Java算法
public static List<MenuExt> createTreeMenus(List<MenuExt> menus) {
List<MenuExt> treeMenus = null;
if (null != menus && !menus.isEmpty()) {
// 创建根节点
MenuExt root = new MenuExt();
root.setName("菜单根目录");
// 组装Map数据
Map<Long, MenuExt> dataMap = new HashMap<Long, MenuExt>();
for (MenuExt menu : menus) {
dataMap.put(menu.getId(), menu);
}
// 组装树形结构
Set<Entry<Long, MenuExt>> entrySet = dataMap.entrySet();
for (Entry<Long, MenuExt> entry : entrySet) {
MenuExt menu = 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();
}
return treeMenus;
}
来源:http://www.cnblogs.com/banning/p/6218633.html
标签:java,树形结构
0
投稿
猜你喜欢
spring 整合mybatis后用不上session缓存的原因分析
2021-12-09 10:11:03
Apache和Tomcat有什么区别_动力节点Java学院整理
2023-08-15 08:49:44
java内部类原理与用法详解
2022-12-04 14:41:25
C#实现文件上传下载Excel文档示例代码
2023-01-09 20:53:23
springboot集成shiro权限管理简单实现
2023-10-27 13:39:02
Spring缓存注解@Cacheable @CacheEvit @CachePut使用介绍
2022-06-05 01:47:14
基于WPF实现简单的文件夹比较工具
2023-11-15 16:08:34
java文字转语音播报功能的实现方法
2022-05-08 18:44:41
以武侠形式理解Java LinkedList源码
2021-12-27 20:34:23
Java 内置Http Server构建web应用案例详解
2023-11-20 22:29:53
Feign调用可重试的最佳方案分享
2021-06-09 12:19:23
JVM垃圾收集器详解
2022-10-06 10:46:00
Java的Spring框架中AOP项目的一般配置和部署教程
2021-07-26 16:49:25
Java时间复杂度、空间复杂度的深入详解
2023-10-22 01:22:40
C#日期格式字符串的相互转换操作实例分析
2021-09-01 10:06:56
如何在IDE部署springboot项目(有swagger和无swagger都是一样的)到服务器或者虚拟机上的docker
2023-09-01 00:33:25
JetCache 缓存框架的使用及源码解析(推荐)
2021-07-23 12:21:25
Spring Boot Actuator自定义健康检查教程
2022-06-12 14:54:59
C#中的值传递和引用传递详细解析
2022-03-20 20:11:02
Java实现画图 给图片底部添加文字标题
2023-03-28 23:23:06