当前位置:   article > 正文

java树结构Tree生成_java生成树

java生成树

这篇文章介绍了如何利用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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

其中,TreeNode是一个泛型接口,可以定义如下:

public interface TreeNode<T> {
    Integer getId();
    Integer getPid();
    List<T> getChildren();
}
  • 1
  • 2
  • 3
  • 4
  • 5

然后,PermMenuRuleVoPermAdminGroupVo可以实现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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

使用这个方法时,只需要将菜单节点的集合或角色节点的集合作为参数传入即可,例如:

List<PermMenuRuleVo> menuNodes = getMenuNodes();
List<PermMenuRuleVo> menuTree = buildTree(menuNodes);

List<PermAdminGroupVo> adminGroupNodes = getAdminGroupNodes();
List<PermAdminGroupVo> adminGroupTree = buildTree(adminGroupNodes);
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/596096
推荐阅读
相关标签
  

闽ICP备14008679号