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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 生成组织列表树(非递归)

發(fā)布時(shí)間:2024/10/6 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 生成组织列表树(非递归) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在展示菜單列表或組織架構(gòu)等列表時(shí)經(jīng)常會通過樹型結(jié)構(gòu),以樹型結(jié)構(gòu)展示更加直觀。

實(shí)現(xiàn)樹最簡單的方式就是遞歸,該方式隨著樹的深度加深,時(shí)間復(fù)雜度o(n^m)也會指數(shù)型上升,輕則影響用戶體驗(yàn),重則導(dǎo)致系統(tǒng)崩潰。

以下為非遞歸方式,時(shí)間復(fù)雜度為o(n^2)。

實(shí)體類

/*** 組織實(shí)體類** @Author: MonsterTiny* @Date: 2021-04-23 11:49*/ @Data public class AreaVO {/*** 組織ID*/private String orgId;/*** 父組織ID*/private String orgParentId;//組織其他字段就不展示了/*** 子集*/private List<AreaVO> children; }

生成樹的方法

/*** 生成組織樹** @param list * @param root 根節(jié)點(diǎn)id* @return*/public List<AreaVO> getTree(List<AreaVO> list, String root) {List<AreaVO> orgs = new ArrayList<>();Map<String, AreaVO> parentObjs = new HashMap<>();// 找出所有的一級菜單for (AreaVO areaVO : list) { if (areaVO.getOrgParentId().equals(root)) {orgs.add(areaVO);}// 記錄一級菜單的id及對應(yīng)的實(shí)體parentObjs.put(areaVO.getOrgId(), areaVO);}// 把每個(gè)組織加到父組織的子集中for (AreaVO areaVO : list) {// 如果是一級菜單,不需要找它的父級if (areaVO.getOrgParentId().equals(root)) {continue;}// 每個(gè)組織找到自己的直接父級,并加入到父級的子集中AreaVO parentObj = parentObjs.get(areaVO.getOrgParentId());// 如果還沒有子組織集合,新建一個(gè)集合并添加子組織if (Objects.isNull(parentObj.getChildren())) {parentObj.setChildren(new ArrayList<>());}parentObj.getChildren().add(areaVO);}return orgs;}

總結(jié)

以上是生活随笔為你收集整理的java 生成组织列表树(非递归)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。