简洁常用权限系统的设计与实现(三):维护和利用节点的深度level,迭代实现树的构造
来源:互联网 发布:小米盒子 破解软件 编辑:程序博客网 时间:2024/05/22 13:37
如果在节点的属性中,增加一个level属性,即树的深度,构造树会非常容易。前提是,增加和修改节点的时候,要维护level。
根节点的level为1,下一级为2,以此类推。
构造树的方法,主要有2个:
// 按照level排序,根节点在上,子结点在下
public static List<Map<String, Object>> buildTree(List<TreeNode> list) {List<Map<String, Object>> rootList = new ArrayList<Map<String, Object>>();Map<String, Map<String, Object>> rootMap = new HashMap<String, Map<String, Object>>();for (TreeNode node : list) {Integer acl = node.getAcl();Integer parentAcl = node.getParentAcl();Map<String, Object> newNode = createNode(acl);rootMap.put(acl + "", newNode);if (parentAcl.equals(-1)) {rootList.add(newNode);} else {Map<String, Object> fatherNode = rootMap.get(parentAcl + "");addChild(fatherNode, newNode);}}return rootList;}private static void addChild(Map<String, Object> father,Map<String, Object> child) {//如果father=null,一定是没有正确按照level排序导致的if (father == null) {System.out.println("error,Father is null");return;}Object o = father.get("children");List<Map<String, Object>> childs;if (o == null) {childs = new ArrayList<Map<String, Object>>();father.put("children", childs);} else {childs = (List<Map<String, Object>>) o;}childs.add(child);}
只需要简单说几点:
1.按照level升序,顶级节点在最前面。
2.把每一个节点的父结点,先放进map。轮到子结点的时候,把它放进父结点的children中。
3.integer比较的时候, 用queals方法,而不是==。
4.Map的key是区分类型的。
map.put(1,"a");
map.get("1");
放进去的值,和取出来的值很可能不一样。
map的key不是同一个,integer的1和string的“1”是不同的。
5.addChild中的父结点,不可能为null。如果出现,一定是没有按照level正确排序。
这种通过level的方式,构造树,好处是,构造很简单,坏处是,还得维护level,麻烦。
1 0
- 简洁常用权限系统的设计与实现(三):维护和利用节点的深度level,迭代实现树的构造
- 简洁常用权限系统的设计与实现(五):不维护节点的深度level,手动计算level,构造树
- 简洁常用权限系统的设计与实现(六):不维护节点的深度level,手动计算level,构造树 (把一颗无序的树,变成有序的)
- 简洁常用权限系统的设计与实现(四):不维护level,用递归方式构造树
- 简洁常用权限系统的设计与实现(一):构造权限菜单树的N(N>=4)种方法
- 简洁常用权限系统的设计与实现(七):一种错误的不可行的构造树的方法
- 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(四)授权代码维护
- 二叉树的遍历与深度和节点数的计算代码实现
- 二叉树的三种遍历方式的递归实现和迭代实现
- 使用session来实现可维护、简洁的导航组件
- 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(三)图形化机构树
- 模块管理常规功能自定义系统的设计与实现(05--权限和菜单)
- TaskTracker节点的内部设计与实现
- 一个简洁的分页实现(三)
- 三、基于Cortex-A8和ZigBee技术的智能家居监控系统的设计与实现
- 数据权限的设计与实现
- 卡牌游戏战斗系统的设计和实现三
- quickSort 的递归与迭代实现
- 数据结构-树-二叉树-1
- 可任意操作nf_conntrack的nf_sockopt_ops
- hdoj 1312 Red and Black (DFS)
- HTML5 的拖放学习笔记
- 打造史上最容易使用的Tab指示符——Indicator
- 简洁常用权限系统的设计与实现(三):维护和利用节点的深度level,迭代实现树的构造
- 事务隔离级别
- Ubuntu的防火墙配置
- IO--BufferedReader及其子类LineNumberReader
- UIWindow
- 注释(annotation)的开发
- MPEG-4标准笔记
- 获取当前帧,关键帧,指定帧才产生效果(cocos2dx3.0)
- keil c51使用技巧及实战