栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java创建树形结构算法实例代码

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java创建树形结构算法实例代码

在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;


public class MenuExt implements Serializable {

  
  private Long id;

  
  private String name;

  
  private String url;

  
  private String icon;

  
  private Long parentId;

  
  private List children = new ArrayList();

  
  private Integer ordby;

  
  private String state;

  //省略Getter和Setter


  
  public void sortChildren() {
    Collections.sort(children, new Comparator() {
      @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 it = children.iterator(); it.hasNext();) {
      it.next().sortChildren();
    }
  }

  public List getChildren() {
    return children;
  }

  public void setChildren(List children) {
    this.children = children;
  }
}

Java算法

public static List createTreeMenus(List menus) {
    List treeMenus = null;
    if (null != menus && !menus.isEmpty()) {
      // 创建根节点
      MenuExt root = new MenuExt();
      root.setName("菜单根目录");

      // 组装Map数据
      Map dataMap = new HashMap();
      for (MenuExt menu : menus) {
 dataMap.put(menu.getId(), menu);
      }

      // 组装树形结构
      Set> entrySet = dataMap.entrySet();
      for (Entry 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;
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/147969.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号