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

时间:2021-05-20

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

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

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章