码迷,mamicode.com
首页 > 编程语言 > 详细

Java创建树形结构算法实例

时间:2016-12-24 22:57:23      阅读:394      评论:0      收藏:0      [点我收藏+]

标签:nts   arraylist   state   val   new   name   color   entity   entry   

在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构。

首先是需要的JavaBean

  1   2 
  3 import java.io.Serializable;
  4 import java.util.ArrayList;
  5 import java.util.Collections;
  6 import java.util.Comparator;
  7 import java.util.Date;
  8 import java.util.Iterator;
  9 import java.util.List;
 10 
 11 /**
 12  * <Description> 菜单扩展<br>
 13  * 
 14  * @author lu.wei<br>
 15  * @email 1025742048@qq.com <br>
 16  * @date 2016年12月19日 <br>
 17  * @since V1.0<br>
 18  * @see com.luwei.console.mg.entity <br>
 19  */
 20 public class MenuExt implements Serializable {
 21 
 22     /**
 23      * 菜单ID
 24      */
 25     private Long id;
 26 
 27     /**
 28      * 菜单名称
 29      */
 30     private String name;
 31 
 32     /**
 33      * 菜单地址
 34      */
 35     private String url;
 36 
 37     /**
 38      * 菜单图标
 39      */
 40     private String icon;
 41 
 42     /**
 43      * 父菜单ID
 44      */
 45     private Long parentId;
 46 
 47     /**
 48      * 子菜单
 49      */
 50     private List<MenuExt> children = new ArrayList<MenuExt>();
 51 
 52     /**
 53      * 菜单顺序
 54      */
 55     private Integer ordby;
 56 
 57     /**
 58      * 菜单状态
 59      */
 60     private String state;
 61 
 62     //省略Getter和Setter
 63 
 64 
 65     /**
 66      * 
 67      * <Description> 孩子节点排序<br>
 68      * 
 69      * @author lu.wei<br>
 70      * @email 1025742048@qq.com <br>
 71      * @date 2016年12月22日 下午10:54:26 <br>
 72      * <br>
 73      */
 74     public void sortChildren() {
 75         Collections.sort(children, new Comparator<MenuExt>() {
 76             @Override
 77             public int compare(MenuExt menu1, MenuExt menu2) {
 78                 int result = 0;
 79 
 80                 Integer ordby1 = menu1.getOrdby();
 81                 Integer ordby2 = menu2.getOrdby();
 82 
 83                 Long id1 = menu1.getId();
 84                 Long id2 = menu2.getId();
 85                 if (null != ordby1 && null != ordby2) {
 86                     result = (ordby1 < ordby2 ? -1 : (ordby1 == ordby2 ? 0 : 1));
 87                 } else {
 88                     result = (id1 < id2 ? -1 : (id1 == id2 ? 0 : 1));
 89                 }
 90                 return result;
 91             }
 92 
 93         });
 94         // 对每个节点的下一层节点进行排序
 95         for (Iterator<MenuExt> it = children.iterator(); it.hasNext();) {
 96             it.next().sortChildren();
 97         }
 98     }
 99 
100     public List<MenuExt> getChildren() {
101         return children;
102     }
103 
104     public void setChildren(List<MenuExt> children) {
105         this.children = children;
106     }
107 }

 

Java算法

 1 public static List<MenuExt> createTreeMenus(List<MenuExt> menus) {
 2         List<MenuExt> treeMenus = null;
 3         if (null != menus && !menus.isEmpty()) {
 4             // 创建根节点
 5             MenuExt root = new MenuExt();
 6             root.setName("菜单根目录");
 7 
 8             // 组装Map数据
 9             Map<Long, MenuExt> dataMap = new HashMap<Long, MenuExt>();
10             for (MenuExt menu : menus) {
11                 dataMap.put(menu.getId(), menu);
12             }
13 
14             // 组装树形结构
15             Set<Entry<Long, MenuExt>> entrySet = dataMap.entrySet();
16             for (Entry<Long, MenuExt> entry : entrySet) {
17                 MenuExt menu = entry.getValue();
18                 if (null == menu.getParentId() || 0 == menu.getParentId()) {
19                     root.getChildren().add(menu);
20                 } else {
21                     dataMap.get(menu.getParentId()).getChildren().add(menu);
22                 }
23             }
24 
25             // 对树形结构进行二叉树排序
26             root.sortChildren();
27             treeMenus = root.getChildren();
28         }
29         return treeMenus;
30     }

 

Java创建树形结构算法实例

标签:nts   arraylist   state   val   new   name   color   entity   entry   

原文地址:http://www.cnblogs.com/banning/p/6218633.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!