java树结构Tree生成
这篇文章介绍了如何利用Java编写树结构算法,特别是动态路由的实现。该篇文章的核心代码就是 buildTree()
方法,可以根据输入的节点集合(treeNodes
)构建树形结构,并返回根节点集合(result
)。
该方法的实现非常简单,其主要思想是将节点集合转换为节点映射表,然后遍历节点映射表,如果找到了父节点,则将该节点添加到父节点的子节点列表中。如果没有找到父节点,则说明该节点为根节点(或者是孤立的节点),将其添加到结果集中。这个实现过程中,利用了泛型接口 TreeNode
来为不同类型的节点提供统一的抽象接口,这很好地体现了Java语言的面向对象特性。
总的来说,这篇文章对Java树结构的解析进行了详尽的介绍,给读者提供了一个很好的参考。特别是对于那些需要使用树形结构的开发者来说,这篇文章提供了一个通用的实现方法,可以最大程度地减少代码的重复率和出错率。
/*** 构建树节点* 先检查节点的pid是否为0,如果是,就将其添加到结果列表中。否则,查找节点的父节点,如果父节点不为空,就将当前节点添加为父节点的子节点。*/
public static <T extends TreeNode<T>> List<T> buildTree(List<T> treeNodes) {List<T> result = new ArrayList<>();Map<Integer, T> nodeMap = new LinkedHashMap<>(treeNodes.size());for (T treeNode : treeNodes) {nodeMap.put(treeNode.getId(), treeNode);}for (T node : nodeMap.values()) {if (node.getPid() == 0) {result.add(node);} else {T parent = nodeMap.get(node.getPid());if (parent != null) {parent.getChildren().add(node);}}}return result;
}
其中,TreeNode
是一个泛型接口,可以定义如下:
public interface TreeNode<T> {Integer getId();Integer getPid();List<T> getChildren();
}
然后,PermMenuRuleVo
和PermAdminGroupVo
可以实现TreeNode
接口,如下:
public class PermMenuRuleVo implements TreeNode<PermMenuRuleVo> {private Integer id;private Integer pid;private List<PermMenuRuleVo> children = new ArrayList<>();// 省略getter和setter
}public class PermAdminGroupVo implements TreeNode<PermAdminGroupVo> {private Integer id;private Integer pid;private List<PermAdminGroupVo> children = new ArrayList<>();// 省略getter和setter
}
使用这个方法时,只需要将菜单节点的集合或角色节点的集合作为参数传入即可,例如:
List<PermMenuRuleVo> menuNodes = getMenuNodes();
List<PermMenuRuleVo> menuTree = buildTree(menuNodes);List<PermAdminGroupVo> adminGroupNodes = getAdminGroupNodes();
List<PermAdminGroupVo> adminGroupTree = buildTree(adminGroupNodes);
java树结构Tree生成相关推荐
- Linux - tree 生成目录树「Note」
概览 tree 安装 tree 可选参数 tree 常用参数 win 配置 tree 安装 #Debian apt-get install tree#Ubuntu apt-get install tr ...
- Java使用itext生成Pdf
Java使用itext生成Pdf 背景 所需依赖 解决jpedal-lgpl jar包问题 示例代码 生成带图片的PDF(使用本地文件系统图片) 生成带图片的PDF(使用网络图片) 背景 在某些业务场 ...
- Java短连接生成工具-思路
Java短连接生成工具-思路-这里只是模拟一下 package com.csrs.trans.shorturl;import java.util.HashMap; import java.util.M ...
- java cxf服务端代码_【JAVA】 cxf 生成 webservice 服务端代码
CXF Apache CXF = Celtix + XFire.CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding . ...
- gen文件下有两个R.java_gen目录无法更新,或者gen目录下的R.JAVA文件无法生成
gen目录无法更新,或者gen目录下的R.JAVA文件无法生成 1.gen目录的用处 android gen目录下的R.java并不是由用户创建,而是android工程本身将android的资源进行自 ...
- Java根据正则生成随机字符串
regex="^([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$" 调研了下,目前有5种开源工具: ①import ...
- java对象实例_深入理解Java对象实例生成的例子!(转)
深入理解Java对象实例生成的例子!(转)[@more@]代码如下: class A { public int Avar; public A() { System.out.println(" ...
- java图形验证码生成工具类
转载自 java图形验证码生成工具类 生成验证码效果 ValidateCode.java 验证码生成类 package cn.dsna.util.images; import java ...
- java代码自动生成的插件_如何使用插件生成自定义Java 8代码
java代码自动生成的插件 大多数程序员讨厌的一件事就是编写样板代码. 无休止的时间花费在设置实体类和配置数据库连接上. 为了避免这种情况,您可以让Speedment Open Source之类的程序 ...
最新文章
- New Phytologist:王建军等综述全球变化下的山地微生物组和生态系统功能
- druid读取hdfs文件
- Packer创建阿里云本地镜像
- C语言:--位域和内存对齐
- python autohotkey_PyAutoGUI-python版的autoit/AHK
- python新浪微博爬虫_利用新浪API实现数据的抓取\微博数据爬取\微博爬虫
- 如何寻找竞争情报发挥企业优势
- 详解Spring Ioc(控制反转)
- canvas实现图片旋转
- 天池比赛TASK3打卡
- sql的一些简单查询
- YOLOv3目标检测算法——通俗易懂的解析
- win10怎么将计算机放桌面壁纸,win10电脑系统怎么改变桌面壁纸的大小
- 计算机教师继续教育心得,教师继续教育学习心得体会范文(精选8篇)
- 教你快速打出左角括号、右角括号「」(直角括号)
- oracle CLOB与BLOB的区别及使用
- 2022.07.16模拟赛总结
- linux 文件唯一标识符,详解Linux中获取全球唯一标示符UUID的方法
- addweek oracle_Oracle数据库常用语法
- Python 语言中的 “鸭子类型”
热门文章
- linux 面试题全面总结(持续更新)
- c# 骰子作画实现 图片转字符
- – 8、查询没学过“张三“老师授课的同学的信息
- linux系统怎么做备份吗,备份Linux操作系统的几种方法
- mysql双机热备_mysql双机热备实现方案
- 【Spring心得】xmlns=“http://www.spring 和 xmlns:beans=“http://www.spring 差之毫厘谬以千里
- SpringBoot实践(三十二):5分钟搭建springboot单体应用开发框架
- python爬虫软件-3款你必须知道的爬虫工具
- ubuntu 使用集显显示,使用独显计算
- hvt lvt svt的cell泄露功耗的原因