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; }

    推荐阅读