Java創(chuàng)建樹形結(jié)構(gòu)算法實(shí)例代碼
在JavaWeb的相關(guān)開發(fā)中經(jīng)常會(huì)涉及到多級(jí)菜單的展示,為了方便菜單的管理需要使用數(shù)據(jù)庫(kù)進(jìn)行支持,本例采用相關(guān)算法講數(shù)據(jù)庫(kù)中的條形記錄進(jìn)行相關(guān)組裝和排序講菜單組裝成樹形結(jié)構(gòu)。
首先是需要的JavaBean
import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.Iterator; import java.util.List; /** * <Description> 菜單擴(kuò)展<br> */ public class MenuExt implements Serializable { /** * 菜單ID */ private Long id; /** * 菜單名稱 */ private String name; /** * 菜單地址 */ private String url; /** * 菜單圖標(biāo) */ private String icon; /** * 父菜單ID */ private Long parentId; /** * 子菜單 */ private List<MenuExt> children = new ArrayList<MenuExt>(); /** * 菜單順序 */ private Integer ordby; /** * 菜單狀態(tài) */ private String state; //省略Getter和Setter /** * * <Description> 孩子節(jié)點(diǎn)排序<br> * */ public void sortChildren() { Collections.sort(children, new Comparator<MenuExt>() { @Override public int compare(MenuExt menu1, MenuExt menu2) { int result = 0; Integer ordby1 = menu1.getOrdby(); Integer ordby2 = menu2.getOrdby(); Long id1 = menu1.getId(); Long id2 = menu2.getId(); if (null != ordby1 && null != ordby2) { result = (ordby1 < ordby2 ? -1 : (ordby1 == ordby2 ? 0 : 1)); } else { result = (id1 < id2 ? -1 : (id1 == id2 ? 0 : 1)); } return result; } }); // 對(duì)每個(gè)節(jié)點(diǎn)的下一層節(jié)點(diǎn)進(jìn)行排序 for (Iterator<MenuExt> it = children.iterator(); it.hasNext();) { it.next().sortChildren(); } } public List<MenuExt> getChildren() { return children; } public void setChildren(List<MenuExt> children) { this.children = children; } }
Java算法
public static List<MenuExt> createTreeMenus(List<MenuExt> menus) { List<MenuExt> treeMenus = null; if (null != menus && !menus.isEmpty()) { // 創(chuàng)建根節(jié)點(diǎn) MenuExt root = new MenuExt(); root.setName("菜單根目錄"); // 組裝Map數(shù)據(jù) Map<Long, MenuExt> dataMap = new HashMap<Long, MenuExt>(); for (MenuExt menu : menus) { dataMap.put(menu.getId(), menu); } // 組裝樹形結(jié)構(gòu) Set<Entry<Long, MenuExt>> entrySet = dataMap.entrySet(); for (Entry<Long, MenuExt> entry : entrySet) { MenuExt menu = entry.getValue(); if (null == menu.getParentId() || 0 == menu.getParentId()) { root.getChildren().add(menu); } else { dataMap.get(menu.getParentId()).getChildren().add(menu); } } // 對(duì)樹形結(jié)構(gòu)進(jìn)行二叉樹排序 root.sortChildren(); treeMenus = root.getChildren(); } return treeMenus; }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java遞歸遍歷樹形結(jié)構(gòu)的實(shí)現(xiàn)代碼
- 使用遞歸刪除樹形結(jié)構(gòu)的所有子節(jié)點(diǎn)(java和mysql實(shí)現(xiàn))
- java實(shí)現(xiàn)省市區(qū)轉(zhuǎn)換成樹形結(jié)構(gòu)
- Java實(shí)現(xiàn)樹形結(jié)構(gòu)的示例代碼
- Java數(shù)據(jù)封裝樹形結(jié)構(gòu)代碼實(shí)例
- java轉(zhuǎn)樹形結(jié)構(gòu)工具類詳解
- 使用遞歸算法結(jié)合數(shù)據(jù)庫(kù)解析成Java樹形結(jié)構(gòu)的代碼解析
- 詳解Java遞歸實(shí)現(xiàn)樹形結(jié)構(gòu)的兩種方式
- Java接口返回省市區(qū)樹形結(jié)構(gòu)的實(shí)現(xiàn)
相關(guān)文章
Mybatis中的config.xml配置文件詳細(xì)解析
這篇文章主要介紹了詳解Mybatis-config.xml配置文件,需要的朋友可以參考下2017-12-12基于Spring Boot的Logback日志輪轉(zhuǎn)配置詳解
本篇文章主要介紹了基于Spring Boot的Logback日志輪轉(zhuǎn)配置詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10java 線程池keepAliveTime的含義說(shuō)明
這篇文章主要介紹了java 線程池keepAliveTime的含義說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02相冊(cè)管理系統(tǒng)(Java表單+xml數(shù)據(jù)庫(kù)存儲(chǔ))
這篇文章主要為大家詳細(xì)介紹了相冊(cè)管理系統(tǒng)的實(shí)現(xiàn)步驟,Java表單的文件上傳和下載,xml數(shù)據(jù)庫(kù)存儲(chǔ)信息,感興趣的小伙伴們可以參考一下2016-07-07Java給JFrame窗口設(shè)置熱鍵的方法實(shí)現(xiàn)
這篇文章主要介紹了Java給JFrame窗口設(shè)置熱鍵的方法實(shí)現(xiàn),文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Java開源工具iText生成PDF簡(jiǎn)單實(shí)例
這篇文章主要介紹了Java開源工具iText生成PDF簡(jiǎn)單實(shí)例,本文給出了3段代碼實(shí)例,講解創(chuàng)建一個(gè)簡(jiǎn)單PDF文件,在PDF中添加表格以及在PDF中添加圖片,需要的朋友可以參考下2015-07-07詳解使用MyBatis Generator自動(dòng)創(chuàng)建代碼
這篇文章主要介紹了使用MyBatis Generator自動(dòng)創(chuàng)建代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12IDEA配置tomcat的方法、IDEA配置tomcat運(yùn)行web項(xiàng)目詳解
這篇文章主要介紹了IDEA配置tomcat的方法、IDEA配置tomcat運(yùn)行web項(xiàng)目詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07SpringBoot詳解整合Spring?Boot?Admin實(shí)現(xiàn)監(jiān)控功能
這篇文章主要介紹了SpringBoot整合Spring?Boot?Admin實(shí)現(xiàn)服務(wù)監(jiān)控,內(nèi)容包括Server端服務(wù)開發(fā),Client端服務(wù)開發(fā)其中Spring?Boot?Admin還可以對(duì)其監(jiān)控的服務(wù)提供告警功能,如服務(wù)宕機(jī)時(shí),可以及時(shí)以郵件方式通知運(yùn)維人員,感興趣的朋友跟隨小編一起看看吧2022-07-07