java树结构Tree生成
這篇文章介紹了如何利用Java編寫樹結構算法,特別是動態(tài)路由的實現。該篇文章的核心代碼就是 buildTree() 方法,可以根據輸入的節(jié)點集合(treeNodes)構建樹形結構,并返回根節(jié)點集合(result)。
該方法的實現非常簡單,其主要思想是將節(jié)點集合轉換為節(jié)點映射表,然后遍歷節(jié)點映射表,如果找到了父節(jié)點,則將該節(jié)點添加到父節(jié)點的子節(jié)點列表中。如果沒有找到父節(jié)點,則說明該節(jié)點為根節(jié)點(或者是孤立的節(jié)點),將其添加到結果集中。這個實現過程中,利用了泛型接口 TreeNode 來為不同類型的節(jié)點提供統(tǒng)一的抽象接口,這很好地體現了Java語言的面向對象特性。
總的來說,這篇文章對Java樹結構的解析進行了詳盡的介紹,給讀者提供了一個很好的參考。特別是對于那些需要使用樹形結構的開發(fā)者來說,這篇文章提供了一個通用的實現方法,可以最大程度地減少代碼的重復率和出錯率。
/*** 構建樹節(jié)點* 先檢查節(jié)點的pid是否為0,如果是,就將其添加到結果列表中。否則,查找節(jié)點的父節(jié)點,如果父節(jié)點不為空,就將當前節(jié)點添加為父節(jié)點的子節(jié)點。*/ 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 }使用這個方法時,只需要將菜單節(jié)點的集合或角色節(jié)點的集合作為參數傳入即可,例如:
List<PermMenuRuleVo> menuNodes = getMenuNodes(); List<PermMenuRuleVo> menuTree = buildTree(menuNodes);List<PermAdminGroupVo> adminGroupNodes = getAdminGroupNodes(); List<PermAdminGroupVo> adminGroupTree = buildTree(adminGroupNodes);總結
以上是生活随笔為你收集整理的java树结构Tree生成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php对于5g云桌面前景,5G覆盖时代对
- 下一篇: 象棋机器人夹伤7岁男孩手指,软件测试工程