java树结构Tree生成
生活随笔
收集整理的這篇文章主要介紹了
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生成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php对于5g云桌面前景,5G覆盖时代对
- 下一篇: 象棋机器人夹伤7岁男孩手指,软件测试工程