本网页所有文字内容由 imapbox邮箱云存储,邮箱网盘, iurlBox网页地址收藏管理器 下载并得到。
ImapBox 邮箱网盘 工具地址: https://www.imapbox.com/download/ImapBox.5.5.1_Build20141205_CHS_Bit32.exe
PC6下载站地址:PC6下载站分流下载
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox 网页视频 工具地址: https://www.imapbox.com/download/ImovieBox4.7.0_Build20141115_CHS.exe
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
如果在节点的属性中,增加一个level属性,即树的深度,构造树会非常容易。前提是,增加和修改节点的时候,要维护level。 // 按照level排序,根节点在上,子结点在下
只需要简单说几点: 4.Map的key是区分类型的。 map.put(1,"a"); map.get("1"); 放进去的值,和取出来的值很可能不一样。 map的key不是同一个,integer的1和string的“1”是不同的。
根节点的level为1,下一级为2,以此类推。
构造树的方法,主要有2个: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方法,而不是==。
5.addChild中的父结点,不可能为null。如果出现,一定是没有按照level正确排序。
这种通过level的方式,构造树,好处是,构造很简单,坏处是,还得维护level,麻烦。
阅读和此文章类似的: 程序员专区