Java 创建树形结构算法实例代码
这里有新鲜出炉的 Java 并发编程示例, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
本篇文章主要介绍了 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;
- /**
- * <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;
- }
来源: http://www.phperz.com/article/18/0205/358731.html