最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java創(chuàng)建樹(shù)形結(jié)構(gòu)算法實(shí)例代碼

 更新時(shí)間:2017年01月20日 16:25:07   作者:路偉  
本篇文章主要介紹了Java創(chuàng)建樹(shù)形結(jié)構(gòu)算法實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。

在JavaWeb的相關(guān)開(kāi)發(fā)中經(jīng)常會(huì)涉及到多級(jí)菜單的展示,為了方便菜單的管理需要使用數(shù)據(jù)庫(kù)進(jìn)行支持,本例采用相關(guān)算法講數(shù)據(jù)庫(kù)中的條形記錄進(jìn)行相關(guān)組裝和排序講菜單組裝成樹(shù)形結(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);
      }

      // 組裝樹(shù)形結(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ì)樹(shù)形結(jié)構(gòu)進(jìn)行二叉樹(shù)排序
      root.sortChildren();
      treeMenus = root.getChildren();
    }
    return treeMenus;
  }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Spring Boot自動(dòng)裝配的方法步驟

    詳解Spring Boot自動(dòng)裝配的方法步驟

    這篇文章主要介紹了詳解Spring Boot自動(dòng)裝配的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 使用spring-data-redis中的Redis事務(wù)

    使用spring-data-redis中的Redis事務(wù)

    這篇文章主要介紹了使用spring-data-redis中的Redis事務(wù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 淺談log4j的rootLogger及其他坑爹的地方

    淺談log4j的rootLogger及其他坑爹的地方

    這篇文章主要介紹了log4j的rootLogger及其他坑爹的地方,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Springboot整合camunda+mysql的集成流程分析

    Springboot整合camunda+mysql的集成流程分析

    本文介紹基于mysql數(shù)據(jù)庫(kù),如何實(shí)現(xiàn)camunda與springboot的集成,如何實(shí)現(xiàn)基于springboot運(yùn)行camunda開(kāi)源流程引擎,本文分步驟圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-06-06
  • SpringBoot定時(shí)任務(wù)詳解與案例代碼

    SpringBoot定時(shí)任務(wù)詳解與案例代碼

    SpringBoot是一個(gè)流行的Java開(kāi)發(fā)框架,它提供了許多便捷的特性來(lái)簡(jiǎn)化開(kāi)發(fā)過(guò)程,其中之一就是定時(shí)任務(wù)的支持,讓開(kāi)發(fā)人員可以輕松地在應(yīng)用程序中執(zhí)行定時(shí)任務(wù),本文將詳細(xì)介紹如何在Spring?Boot中使用定時(shí)任務(wù),并提供相關(guān)的代碼示例
    2023-06-06
  • java右下角彈窗示例分享

    java右下角彈窗示例分享

    這篇文章主要介紹了java右下角彈窗示例,需要的朋友可以參考下
    2014-04-04
  • Spring Reactor基本介紹和案例解析

    Spring Reactor基本介紹和案例解析

    Spring Reactor 是一個(gè)響應(yīng)式編程框架,非常適合類似 MXN 這樣的流程編排系統(tǒng),也是 Java 中異步編程的一種補(bǔ)充,這篇文章主要介紹了Spring Reactor基本介紹和案例解析,需要的朋友可以參考下
    2024-07-07
  • Spring如何自定義XML配置擴(kuò)展

    Spring如何自定義XML配置擴(kuò)展

    這篇文章主要介紹了Spring如何自定義XML配置擴(kuò)展,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • SpringBoot的10個(gè)參數(shù)驗(yàn)證技巧分享

    SpringBoot的10個(gè)參數(shù)驗(yàn)證技巧分享

    參數(shù)驗(yàn)證很重要,是平時(shí)開(kāi)發(fā)環(huán)節(jié)中不可少的一部分,但是我想很多后端同事會(huì)偷懶,干脆不錯(cuò),這樣很可能給系統(tǒng)的穩(wěn)定性和安全性帶來(lái)嚴(yán)重的危害,那么在Spring Boot應(yīng)用中如何做好參數(shù)校驗(yàn)工作呢,本文提供了10個(gè)小技巧,需要的朋友可以參考下
    2023-09-09
  • 使用@ConditionalOnProperty控制是否加載的操作

    使用@ConditionalOnProperty控制是否加載的操作

    這篇文章主要介紹了使用@ConditionalOnProperty控制是否加載的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評(píng)論

垦利县| 岫岩| 佛坪县| 金昌市| 曲阜市| 罗平县| 玛沁县| 肇东市| 渭南市| 育儿| 盐边县| 铜川市| 涟源市| 舞阳县| 高台县| 武鸣县| 兴安县| 武功县| 宜黄县| 平和县| 揭西县| 榕江县| 曲阳县| 石阡县| 灵川县| 萍乡市| 宕昌县| 商都县| 出国| 潮安县| 修文县| 小金县| 柯坪县| 衡东县| 丰台区| 乐至县| 章丘市| 高台县| 青田县| 洮南市| 连平县|