树形结构

java树形结构工具类

给你一囗甜甜゛ 提交于 2019-11-29 03:26:51
一.树形结构数据一般都是以子父id的形式存在数据库中,查询的时候只是带有子id和parent_id的List集合 并不是树形结构,所以我们现在要将普通的List集合转换为树结构数据(本工具类扩展操作树结构数据方法) 1.工具类(TreeNodeUtil) 代码示例: package com.ywb.pms.util.tree; import com.alibaba.druid.util.StringUtils; import com.ywb.pms.vo.BaseTreeNode; import org.apache.commons.collections.CollectionUtils; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * @Author: ywb * @Date: 2019/8/19 14:32 * @Version 1.0 */ public class TreeNodeUtil { /** * 获取关联父节点数据集合列表 * 由对应的子节点到根节点(root) * * @param id 要搜索对应父节点节点的id *

进程和计划任务管理

我的未来我决定 提交于 2019-11-28 16:12:44
本次给大家介绍的是进程和计划任务管理 一、查看进程 二、控制进程 三、at一次任务设置 四、crontab周期服务设置 一、查看进程 程序和进程的关系 1、保存在硬盘、光盘等介质中的可执行代码和数据 2、静态保存的代码 进程 1、 在CPU及内存中运行的程序代码 2、动态执行的代码 3、父、子进程:每个进程可以创建一个或多个进程 相关命令 ps命令-查看静态的进程信息 a:查看当前系统的所有进程 u:指定用户 x:该用户在所有终端下的进程 -e:显示系统内的所有进程信息 -l:使用长格式显示进程信息 -f:使用完整的格式显示进程信息 例如 命令ps-aux:简单列表的形式显示出进程信息 命令ps-elf:以长格式显示系统中的进程信息,输出信息还包括PPID列 实际操作 1、用ps-aux查看当前root的静态进程。 其中USER指当前用户;PID 为进程号(PID为1的是init); %CPU、%MEN指cpu的占用率、内存占用率;VSZ、RSS为虚拟内存、物理内存占用;TTY : 终端(?为未知、大多本地加载为?);STAT : 当前进程状态(S可中断休眠进程、D不可中断休眠进程、s父进程、<代表优先级高、R运行进程、l代表多线性、N优先级低、Z僵尸进程、+前台进程);START:为启动时间;Time:进程占用CPU的总时间;Command :进程名称。 2、用ps

什么是数据结构?什么是算法

a 夏天 提交于 2019-11-28 16:11:42
记得是大一大二的时候学习了数据结构。时间过的好快,现在实现了,现在感觉自己的基础好差很多都不会。欠的帐还是要还的! 什么是数据结构?什么是算法? 呃呃呃呃 哎….不会。 多次参加了MOOC姥姥的数据结构,都没有坚持下来,希望这次可以坚持下来。 引用姥姥的例子:如果给你一堆书你会怎么放? 想怎么放就怎么放,哈哈。 如果书不多,我们一般是一本插着一本的放着。如下图 要是书的规模很大呢?如学校图书馆里面的书如果是按上述一本一本的插入,那么以后需要找书的时候是不是累死人了。如下图 所以答案是看书的规模。 什么是数据结构? 数据是什么?结构是什么? 参考大话数据结构,几个术语的定义 数据 :是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号 集合 。 其实就是图书馆中所有的书。 数据元素 :是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。 就是书。 数据项 :一个数据元素可以由若干个数据项组成。 其实就是书名、作者、出版社啥的…. class Book { //书名 private String bookName; //作者 private String bookAuthor; //出版社 private String bookPress; } 其实一个Book对象就是数据元素,bookName、bookAuthor

[Java] 计蒜客---苹果数 (dfs序)

时间秒杀一切 提交于 2019-11-28 15:34:46
一、内容 二、思路 用dfs序将树形结构转换为线性结构,然后用线段树或树状数据进行维护。 当用dfs遍历这棵树的时候,进入到这个点是有一个进入时间in,递归完成后有一个退出时间out,所以这个点和它子树所在的区间就是【in[u], out[u]】(u就是这个点)。 static int [ ] in = new int [ N + 5 ] ; // in[j] 代表节点j子树的左端点,也就是节点所在端点 static int [ ] ot = new int [ N + 5 ] ; // ot[j] 代表节点子树以哪个右断点 static int time ; // 建立dfs序 static void dfs ( int u ) { in [ u ] = ++ time ; //进入的时间 for ( int j = head [ u ] ; j != - 1 ; j = e [ j ] . next ) { int v = e [ j ] . v ; dfs ( v ) ; } // 出去的时间 递归结束 ot [ u ] = time ; } 获得了以u为根节点的区间,就转化成了求这个 区间里面有多少个苹果 。 更新: 用一个vis数组记录这个点上是否有苹果,若有苹果就以当前节点所在区间进行-1,若没有苹果进行+1。 三、代码 import java . io . * ;

JS当中的无限分类递归树

穿精又带淫゛_ 提交于 2019-11-28 15:05:01
列表转换成树形结构方法定义: //javascript 树形结构 function toTree(data) { // 删除 所有 children,以防止多次调用 data.forEach(function(item) { delete item.children; }); // 将数据存储为 以 id 为 KEY 的 map 索引数据列 var map = {}; data.forEach(function(item) { // 在该方法中可以给每个元素增加其他属性 item.text = item.name; map[item.id] = item; }); // console.log(map); var val = []; data.forEach(function(item) { // 以当前遍历项,的pid,去map对象中找到索引的id var parent = map[item.pid]; // 好绕啊,如果找到索引,那么说明此项不在顶级当中,那么需要把此项添加到,他对应的父级中 if (parent) { // 可以给每个父节点添加属性 parent.iconCls = "i-folder"; // 添加到父节点的子节点属性中 (parent.children || (parent.children = [])).push(item); } else { /

PHPTree——快速生成无限多级分类

半世苍凉 提交于 2019-11-27 20:24:02
在开发中经常需要用到树形数据,比如无限多级分类,就是典型的树形结构。这里面的算法,用到了递归思想,为了简化开发过程,我编写了一个工具来提升开发效率, 它就是PHPTree。 git地址: https://git.oschina.net/jiusem/PHPTree.git 最简单的例子: <?php require('PHPTree.class.php'); //原始数据, 从数据库读出 $data = array( array( 'id'=>1, 'name'=>'book', 'parent_id'=>0 ), array( 'id'=>2, 'name'=>'music', 'parent_id'=>0 ), array( 'id'=>3, 'name'=>'book1', 'parent_id'=>1 ), array( 'id'=>4, 'name'=>'book2', 'parent_id'=>3 ) ); $r = PHPTree::makeTree($data); echo json_encode($r); ?> 输出: [ { "id": 1, "name": "book", "parent_id": 0, "expanded": false, //不展开子节点 "children": [ { "id": 3, "name": "book1", "parent

zookeeper的简介和相关命令操作

依然范特西╮ 提交于 2019-11-27 15:16:33
/*--> */ /*--> */ 1. zookeeper的简介   zookeeper由文件系统和通知机制构成    1)文件系统     Zookeeper使用树形结构管理数据。而且以“/”作为树形结构的根节点。树形结构中的每一个节点都是一个“znode”。文件系统中的目录可以存放其他目录和文件,znode中可以存放其他znode,也可以对应一个具体的值,znode和它对应的值之间是键值对的关系。   树形结构     ①树形结构的主体由znode组成     ②每一个节点包含下面两部分       I. 值:节点的路径和当前节点上保存的值构成一个“键值对(key-value)”关系       II. 状态 stat    2)通知机制     在分布式项目中随着业务功能越来越多,具体的功能模块也会越来越多,一个大型的电商项目能达到几十个模块甚至更多。这么多模块的工程由可能需要共享一些信息,这些信息一但发生变化,各个相关模块工程中手动逐一修改会非常的麻烦,甚至可能发生遗漏。     使用ZooKeeper的通知机制后,各个模块工程在特定的znode上设置Watcher(观察者)来监控当前节点上值的变化,一旦Watcher检测到了数据变化就会立即通知模块,从而实现“ 一处修改,处处生效 ”的效果。      ①目的:一处修改处处更新     ②机制:观察者模式      2.

递归查询树形结构

青春壹個敷衍的年華 提交于 2019-11-27 12:39:12
注意事项: 该方法只是用于小型树型结构,当树结构数据较多的时候,递归时间较长,接口反应很慢,会接口调用超时 实体类 代码实现 private Menu treeRoot(List<Menu> sourceList, Menu rootMenu) { if (sourceList == null) { return null; } List<Menu> childList = new ArrayList<>(); for (Menu menu : sourceList) { String menuCode = rootMenu.getMenuCode(); String parentCode = menu.getParentCode(); if(menuCode.equals(parentCode)) { Menu menuChild = treeRoot(sourceList, menu); childList.add(menuChild); } } if(childList.size()==0) { return rootMenu; } rootMenu.setChildrens(childList); return rootMenu; } 来源: https://blog.csdn.net/qq_37663786/article/details/99674724

mysql 树形结构查询(存储过程)

喜欢而已 提交于 2019-11-26 19:04:25
就用数据数据库表地址数据(中国地区) 来说吧(用Windows 请使用 gbk !!) 可直接运行(去除注解) 存储过程: DELIMITER // drop procedure if exists findLChild // /* iid 递归父节点 , layer 允许递归深度 */ CREATE PROCEDURE findLChild(iid bigint ( 20 ),layer bigint ( 20 )) BEGIN /* 创建接受查询的临时表 */ create temporary table if not exists tmp_table(id bigint ( 20 ),name varchar ( 50 )) ENGINE = InnoDB DEFAULT CHARSET = utf8; /* 最高允许递归数 */ SET @@max_sp_recursion_depth = 99 ; call iterative(iid,layer); /* 核心数据收集 */ select * from tmp_table ; /* 展现 */ drop temporary table if exists tmp_table ; /* 删除临时表 */ END ; // DELIMITER ; DELIMITER // drop procedure if exists

利用多叉树实现Ext JS中的无限级树形菜单(一种构建多级有序树形结构JSON的方法)

这一生的挚爱 提交于 2019-11-26 17:47:02
一、问题研究的背景和意义 目前在Web应用程序开发领域,Ext JS框架已经逐渐被广泛使用,它是富客户端开发中出类拔萃的框架之一。在Ext的UI控件中,树形控件无疑是最为常用的控件之一,它用来实现树形结构的菜单。TreeNode用来实现静态的树形菜单,AsyncTreeNode用来实现动态的异步加载树形菜单,后者最为常用,它通过接收服务器端返回来的JSON格式的数据,动态生成树形菜单节点。动态生成树有两种思路:一种是一次性生成全部树节点,另一种是逐级加载树节点( 利用AJAX,每次点击节点时查询下一级节点 )。对于大数据量的菜单节点来说,逐级加载是比较合适的选择,但是对于小数据量的菜单来说,一次性生成全部节点应该是最为合理的方案。在实际应用开发中,一般不会遇到特别大数据量的场景,所以一次性生成全部菜单节点是我们重点研究的技术点,本文就是介绍基于Ext JS的应用系统中如何将数据库中的无限级层次数据一次性在界面中生成全部菜单节点(例如在界面中以树形方式一次性展示出银行所有分支机构的信息),同时对每一个层次的菜单节点按照某一属性和规则排序,展示出有序的菜单树。 解决Ext JS无限级树形菜单的问题,可以拓展出更多的应用场景,例如树形结构表格TreeGrid,一次性生成树形表格,对树形表格进行完整分页,对表格列进行全排序;或者可以利用本文的思路扩展出其他的更复杂的应用场景。 先看两个图例