在平常的项目中经常使用tree,我们也需要将这些treenode的信息持久化,然而实际的数据库中我们不是将某个node的子节点字段作为父节点的一个字段,当然这也不符合实际情况(父子关系,没有父亲,哪来儿子?)所以我们通常的tree 的一个node对象一般都存parent_id.如图是也treenode 的类图
作为一个简单的存储我们只需要将id,name,parent_id 存储起来。当然存储很简单,利用递归遍历树结构,存储所有的node就OK.
如果你的tree是动态加载,那么不存在什么问题,你只要根据parent_id 进行检索,进而渲染node就可以了,如果ui要一次将所有的node渲染上去,那么我们该如何将这一条条数据构建成一个tree model?
当然本办法还是有的,我们利用递归也能实现代码 如下:
private static Node popularTree(List<Node> nodes,Node p_node) { if(nodes.contains(p_node))nodes.remove(p_node); for(Node node:nodes){ if(node.getParent_id().equals(p_node.getId())){ p_node.getChildren().add(node); popularTree(nodes,node); } } return p_node; }
即使每次都会去掉当前节点,但是如果一个tree稍微大一点那么,这个来做会有很多很多循环,导致构建tree model 非常耗时。
那么我们能否想一种更好的办法? 当然我这里写此博客不是来说明前面的,重点还是后面。
其实我们不需要这递归 循环。 我们将所有的node 以id为key 以 node对象为value存放的一个map中,
然后我们的代码就变得如此简单:
private static Node popularTree(Map<Integer,Node> nodesMap,List<Node> nodesList,Node root){ for(Node node:nodesList){ if(node.getParent_id().equals(root.getId())){ root.getChildren().add(node); }else if(nodesMap.containsKey(node.getParent_id())){ nodesMap.get(node.getParent_id()).getChildren().add(node); } } return root; }
这样的话我们就仅仅遍历了2次,但是具体第一种方法会执行多少个循环我也不知道。
小记:在我们平时的编程中不一定要按照实际的一些想法来组织数据,我们需要从多个角度来思考,这样话我们的代码执行效率也会有所提高。
相关推荐
内存部分由跳表实现,控制跳表结构的大小为最大2M当跳表中存储的数据量超过2M时,将会写入文件,并清空跳表。 硬盘部分采用分层存储,每层包含多行文件:第0层最多2个文件,第1层最多4个文件,第2二层最多8个...
js数组转换成tree结构数组算法
FPTree 的构造,以及根据FP-Tree进行频繁模式的挖掘 实例算法 基于java实现
二叉树各基本操作时间复杂度与存储结构特点分析及对算法的改进设想。 六.实验总结和体会 实现的基本操作如下: InitBiTree(&T) DestroyBiTree(&T) CreateBiTree(&T) ClearBiTree(&T) BiTreeEmpty(T) BiTreeDepth(T)...
对数据结构的Tree结构做了详细解释,通过网页工具抓下来的
datatables的属性结构实现,使用datatables支持tree结构。
MFC上实现tree结构,并响应tree节点事件
最近用到了el-tree控件,主要是数据的格式,按照官网的数据格式来就可以显示节点的树形结构了。 代码参考很多 这里给出一个比较好的链接:https://www.jb51.net/article/181990.htm 代码说明在注释里写的很详细...
js 树结构 tree js 树结构 tree js 树结构 tree
主要是利用asp技术实现tree形结构的源代码 ,
仅用于个人学习
filetree 以树形结构显示文件目录结构,它非常适合给别人介绍文件目录的组成框架
提出了一种基于ChangeTree的本体变更日志存储方法。该方法采用有向树来组织本体的变更过程,用变更树节点来存储本体变更的信息,用节点间与或关系来关联本体的变更类型;同时该方法能采用树搜索来遍历本体变更的每...
树形结构菜单treedemo,树形结构菜单treedemo,树形结构菜单treedemo
本项目将基于LSM Tree开发一个简化的键值存储系统。支持以下基本操作: PUT(K,V)设置键K的值为V GET(K)读取键K的值 DELETE(K)删除键K的值 其中K是64位有符号整数,V位字符串
主要介绍了element-ui tree结构实现增删改自定义功能代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Tree树结构,这个通俗易懂,想了解的可以下载
tree.js树形结构,多用于组织结构tree.js树形结构,多用于组织结构tree.js树形结构,多用于组织结构tree.js树形结构,多用于组织结构
一种基于OpenCL的KD-Tree构造的并行优化算法,高泽,徐晓慧,综述在场景的渲染过程中,为了加速渲染的速度,常常需要使用一些加速结构对场景进行划分。而KD-Tree是目前场景划分中最高效最常用�