久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

java TreeUtil菜單遞歸工具類

瀏覽:5日期:2022-08-26 09:22:43

本文實例為大家分享了java TreeUtil菜單遞歸工具類的具體代碼,供大家參考,具體內容如下

菜單樹(詳細)

package com.admin.manager.storeService.util;import com.admin.manager.storeService.entity.Menu;import java.util.ArrayList;import java.util.List;/** * @author m * @date 2019/12/16 */public class TreeUtil { /** * 獲取菜單樹 * @param menus 所有菜單 * @return */ public static List<Menu> menuTree(List<Menu> menus) { //返回的菜單樹 List<Menu> rootMenus = new ArrayList<>(); for (Menu menu : menus) { //pid(上級Id)為0的是根菜單 if ('0'.equals(menu.getPid())) { rootMenus.add(menu); } } //遍歷,找到二級菜單(根菜單的id和所有菜單中的pid比較) for (Menu rootMenu : rootMenus) { List<Menu> child = getChild(String.valueOf(rootMenu.getId()), menus); rootMenu.setChildren(child); } return rootMenus; } /** * 遞歸獲取下級菜單 * @param pid 上級Id * @param menus 所有菜單 * @return */ public static List<Menu> getChild(String pid, List<Menu> menus) { //子菜單列表 List<Menu> childList = new ArrayList<>(); for (Menu menu : menus) { if (pid.equals(menu.getPid())) { childList.add(menu); } } //遍歷 遞歸獲取子菜單的子菜單 for (Menu menu : childList) { List<Menu> child = getChild(String.valueOf(menu.getId()), menus); menu.setChildren(child); } //遞歸出口 childList長度為0 if (childList.size() == 0) { return new ArrayList<>(); } return childList; }}

上面這種遞歸,如果遇到大數據量,效率是極低的。比如前段時間剛實現了省市區鎮四層的樹結構,面對5萬條的數據,竟然120s才遞歸完,這也太慢了,將來需求變成了省市區鎮鄉五層的結構,那不就掛了?

大眼一看,不是跟上面的一樣嘛。仔細看 it.remove();

假設有五萬的數據,根節點1萬,二級節點1萬,三級節點1萬,4級節點2萬。如果按照上面的邏輯走,每次都要從5萬中數據遞歸查找;而下面的邏輯是找到N級節點并且在總list中刪除。假設找到根節點的1萬數據,并且把他們從總list中刪除,總list剩4萬條數據,依次這樣,到了找4級節點時,總list就已經剩2萬條數據了,總數據量從5萬變成了2萬,循環次數就少了,效率也就高了

import com.energy.service.vo.RegionTree;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * @author m * @date 2020/4/2 */public class TreeUtil { /** * 創建樹結構 * @param regionTrees * @return */ private List<RegionTree> tree(List<RegionTree> regionTrees) { //返回的節點樹 List<RegionTree> rootNodes = new ArrayList<>(); Iterator<RegionTree> it = regionTrees.iterator(); while (it.hasNext()) { RegionTree next = it.next(); //parent(上級Id)為0的是根節點 if ('0'.equals(next.getParentId())) { rootNodes.add(next); it.remove(); } } //遍歷,找到二級節點 for (RegionTree regionTree : rootNodes) { List<RegionTree> child = getChild(regionTrees, regionTree.getId().toString()); regionTree.setChildren(child); } return rootNodes; } /** * 查子節點 * * @param regions * @param parentId * @return */ private List<RegionTree> getChild(List<RegionTree> regions, String parentId) { //子節點列表 List<RegionTree> childList = new ArrayList<>(); Iterator<RegionTree> it = regions.iterator(); while (it.hasNext()) { RegionTree regionTree = it.next(); if (parentId.equals(regionTree.getParentId())) { childList.add(regionTree); it.remove(); } } //遍歷 遞歸獲取子節點的子節點 for (RegionTree regionTree : childList) { List<RegionTree> child = getChild(regions, regionTree.getId().toString()); regionTree.setChildren(child); } //遞歸出口 childList長度為0 if (childList.size() == 0) { return new ArrayList<>(); } return childList; }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 男人的天堂在线视频 | av在线干 | 国产欧美一区二区 | 视频一区在线 | 色成人免费网站 | 亚洲天堂电影网 | 久久精品一区二区三区中文字幕 | 九九福利 | 国产一区二区三区久久久久久 | 欧美一区亚洲二区 | 欧美成人激情视频 | 亚洲高清资源 | 九色91 | 午夜av在线| av网站在线免费看 | 特级丰满少妇一级aaaa爱毛片 | 欧美日本一区二区三区 | 一区二区亚洲 | 国产精品456在线影视 | 国产欧美久久久久久 | 91免费在线视频 | 久久久999成人 | 成人免费一区二区三区视频网站 | 久久天堂网 | 99国产精品久久久久久久成人热 | 一区二区免费 | 欧美一区二区三区精品 | 第一色在线 | 一区二区三区成人久久爱 | 欧美午夜一区二区三区免费大片 | 亚洲乱码国产乱码精品精98午夜 | 亚洲一区免费观看 | 四虎影院网| 91高清视频在线观看 | 爱草在线 | 国精品产品区三区 | 亚洲国产精品成人久久久 | 精品国产一区二区三区成人影院 | 欧美日韩在线免费观看 | 国产一级特黄视频 | 女人毛片|