日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java树结构Tree生成

發(fā)布時間:2024/5/14 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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生成的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。