国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java創建樹形結構算法實例代碼

2019-11-26 13:12:30
字體:
來源:轉載
供稿:網友

在JavaWeb的相關開發中經常會涉及到多級菜單的展示,為了方便菜單的管理需要使用數據庫進行支持,本例采用相關算法講數據庫中的條形記錄進行相關組裝和排序講菜單組裝成樹形結構。

首先是需要的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> 菜單擴展<br> */public class MenuExt implements Serializable {  /**   * 菜單ID   */  private Long id;  /**   * 菜單名稱   */  private String name;  /**   * 菜單地址   */  private String url;  /**   * 菜單圖標   */  private String icon;  /**   * 父菜單ID   */  private Long parentId;  /**   * 子菜單   */  private List<MenuExt> children = new ArrayList<MenuExt>();  /**   * 菜單順序   */  private Integer ordby;  /**   * 菜單狀態   */  private String state;  //省略Getter和Setter  /**   *    * <Description> 孩子節點排序<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;      }    });    // 對每個節點的下一層節點進行排序    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()) {      // 創建根節點      MenuExt root = new MenuExt();      root.setName("菜單根目錄");      // 組裝Map數據      Map<Long, MenuExt> dataMap = new HashMap<Long, MenuExt>();      for (MenuExt menu : menus) {        dataMap.put(menu.getId(), menu);      }      // 組裝樹形結構      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);        }      }      // 對樹形結構進行二叉樹排序      root.sortChildren();      treeMenus = root.getChildren();    }    return treeMenus;  }

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 栖霞市| 即墨市| 和林格尔县| 综艺| 名山县| 成安县| 高安市| 榆林市| 永清县| 莱芜市| 枣强县| 亚东县| 颍上县| 都安| 胶州市| 清丰县| 南和县| 夏河县| 巴楚县| 龙泉市| 涟源市| 利津县| 忻州市| 同江市| 乌鲁木齐县| 句容市| 阿克| 江城| 青神县| 木兰县| 武隆县| 台东县| 武平县| 连南| 吕梁市| 剑阁县| 阳信县| 义乌市| 秭归县| 昌黎县| 商河县|