Java|树形结构无限极分类数据结构以及递归函数写法
概述
很多人见过菜单导航之类的东西吧,还有分类什么的。就是一级数据下面有二级三级甚至更多,这种数据就需要用到这个树形结构了。
代码实现
【Java|树形结构无限极分类数据结构以及递归函数写法】废话不多说。先创建菜单的实体类吧
我是直接用的实体类里面的 main方法 写了个静态代码块用来模拟数据的。 数据库建模和这个差不多就行。
下面上方法
public class NavTree {
// 创建一个静态的集合用来模拟从数据库中取出的数据
private static List list = new ArrayList<>();
// 主键ID
private Long id;
// 名称
private String name;
// 父级ID
private Long parentId;
// 用来保存这个树中的树杈
private List trees = new ArrayList<>();
public List getTrees() {
return trees;
}public void setTrees(List trees) {
this.trees = trees;
}public NavTree() {
}public NavTree(Long id, String name, Long parentId) {
this.id = id;
this.name = name;
this.parentId = parentId;
}public Long getId() {
return id;
}public void setId(Long id) {
this.id = id;
}public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public Long getParentId() {
return parentId;
}public void setParentId(Long parentId) {
this.parentId = parentId;
}@Override
public String toString() {
return "NavTree{" +
"id=" + id +
", name='" + name + '\'' +
", parentId=" + parentId +
", trees=" + trees +
'}';
}// 静态代码块,用来初始化数据
static {
list.add(new NavTree(1L,"aa",0L));
list.add(new NavTree(2L,"bb",0L));
list.add(new NavTree(3L,"cc",0L));
list.add(new NavTree(33L,"dd",1L));
list.add(new NavTree(44L,"ee",1L));
list.add(new NavTree(55L,"ff",2L));
list.add(new NavTree(66L,"gg",2L));
list.add(new NavTree(77L,"qq",3L));
list.add(new NavTree(88L,"tt",33L));
list.add(new NavTree(99L,"zz",33L));
}// 递归函数 用来创建树形结构
public static NavTree getTree( NavTree tree,List trees2){
// 创建一个集合给实体类添加树杈
ArrayList trees = new ArrayList<>();
// 循环遍历传进来的集合。
for (NavTree t:trees2 ) {
// 通过ID判断是否拥有子菜单
if (tree.getId() == t.getParentId()){
// 并且递归到下一个函数中查看是否还存在子集
getTree(t,trees2);
// 如果拥有 就添加到集合中
trees.add(t);
}
}
// 如果不存在给出一个出口。返回
tree.setTrees(trees);
return tree;
}
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用
- Java基础-高级特性-枚举实现状态机