java list实现树形结构
1.javabean
import java.util.List;
public class TreeNode {
private String id;
private String parentId;
private String name;
private List<TreeNode> children;
public TreeNode(String id, String name, String parentId) {
this.id = id;
this.parentId = parentId;
this.name = name;
}
public TreeNode(String id, String name, TreeNode parent) {
this.id = id;
this.parentId = parent.getId();
this.name = name;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public List<TreeNode> getChildren() {
return children;
}
public void setChildren(List<TreeNode> children) {
this.children = children;
}
@Override
public String toString() {
return "TreeNode{" +
"id='" + id + '\'' +
", parentId='" + parentId + '\'' +
", name='" + name + '\'' +
", children=" + children +
'}';
}
}
2.方法
import java.util.ArrayList;
import java.util.List;
public class TreeBuilder {
/**
* 两层循环实现建树
* @param treeNodes 传入的树节点列表
* @return
*/
public static List<TreeNode> bulid(List<TreeNode> treeNodes) {
List<TreeNode> trees = new ArrayList<TreeNode>();
for (TreeNode treeNode : treeNodes) {
if ("0".equals(treeNode.getParentId())) {
trees.add(treeNode);
}
for (TreeNode it : treeNodes) {
if (it.getParentId() == treeNode.getId()) {
if (treeNode.getChildren() == null) {
treeNode.setChildren(new ArrayList<TreeNode>());
}
treeNode.getChildren().add(it);
}
}
}
return trees;
}
/**
* 使用递归方法建树
* @param treeNodes
* @return
*/
public static List<TreeNode> buildByRecursive(List<TreeNode> treeNodes) {
List<TreeNode> trees = new ArrayList<TreeNode>();
for (TreeNode treeNode : treeNodes) {
if ("0".equals(treeNode.getParentId())) {
trees.add(findChildren(treeNode,treeNodes));
}
}
return trees;
}
/**
* 递归查找子节点
* @param treeNodes
* @return
*/
public static TreeNode findChildren(TreeNode treeNode,List<TreeNode> treeNodes) {
for (TreeNode it : treeNodes) {
if(treeNode.getId().equals(it.getParentId())) {
if (treeNode.getChildren() == null) {
treeNode.setChildren(new ArrayList<TreeNode>());
}
treeNode.getChildren().add(findChildren(it,treeNodes));
}
}
return treeNode;
}
public static void main(String[] args) {
TreeNode treeNode1 = new TreeNode("1","广州","0");
TreeNode treeNode2 = new TreeNode("2","深圳","0");
TreeNode treeNode3 = new TreeNode("3","天河区",treeNode1);
TreeNode treeNode4 = new TreeNode("4","越秀区",treeNode1);
TreeNode treeNode5 = new TreeNode("5","黄埔区",treeNode1);
TreeNode treeNode6 = new TreeNode("6","石牌",treeNode3);
TreeNode treeNode7 = new TreeNode("7","百脑汇",treeNode6);
TreeNode treeNode8 = new TreeNode("8","南山区",treeNode2);
TreeNode treeNode9 = new TreeNode("9","宝安区",treeNode2);
TreeNode treeNode10 = new TreeNode("10","科技园",treeNode8);
List<TreeNode> list = new ArrayList<TreeNode>();
list.add(treeNode1);
list.add(treeNode2);
list.add(treeNode3);
list.add(treeNode4);
list.add(treeNode5);
list.add(treeNode6);
list.add(treeNode7);
list.add(treeNode8);
list.add(treeNode9);
list.add(treeNode10);
3.测试
List<TreeNode> trees = TreeBuilder.bulid(list);
for (int i = 0; i < trees.size(); i++) {
System.out.println(trees.get(i));
}
List<TreeNode> trees_ = TreeBuilder.buildByRecursive(list);
for (int i = 0; i <trees.size(); i++) {
System.out.println(trees.get(i));
}
}
}
4.数据
TreeNode{id='1', parentId='0', name='广州', children=[TreeNode{id='3', parentId='1', name='天河区', children=[TreeNode{id='6', parentId='3', name='石牌', children=[TreeNode{id='7', parentId='6', name='百脑汇', children=null}]}]}, TreeNode{id='4', parentId='1', name='越秀区', children=null}, TreeNode{id='5', parentId='1', name='黄埔区', children=null}]}
TreeNode{id='2', parentId='0', name='深圳', children=[TreeNode{id='8', parentId='2', name='南山区', children=[TreeNode{id='10', parentId='8', name='科技园', children=null}]}, TreeNode{id='9', parentId='2', name='宝安区', children=null}]}
TreeNode{id='1', parentId='0', name='广州', children=[TreeNode{id='3', parentId='1', name='天河区', children=[TreeNode{id='6', parentId='3', name='石牌', children=[TreeNode{id='7', parentId='6', name='百脑汇', children=null}, TreeNode{id='7', parentId='6', name='百脑汇', children=null}]}, TreeNode{id='6', parentId='3', name='石牌', children=[TreeNode{id='7', parentId='6', name='百脑汇', children=null}, TreeNode{id='7', parentId='6', name='百脑汇', children=null}]}]}, TreeNode{id='4', parentId='1', name='越秀区', children=null}, TreeNode{id='5', parentId='1', name='黄埔区', children=null}, TreeNode{id='3', parentId='1', name='天河区', children=[TreeNode{id='6', parentId='3', name='石牌', children=[TreeNode{id='7', parentId='6', name='百脑汇', children=null}, TreeNode{id='7', parentId='6', name='百脑汇', children=null}]}, TreeNode{id='6', parentId='3', name='石牌', children=[TreeNode{id='7', parentId='6', name='百脑汇', children=null}, TreeNode{id='7', parentId='6', name='百脑汇', children=null}]}]}, TreeNode{id='4', parentId='1', name='越秀区', children=null}, TreeNode{id='5', parentId='1', name='黄埔区', children=null}]}
TreeNode{id='2', parentId='0', name='深圳', children=[TreeNode{id='8', parentId='2', name='南山区', children=[TreeNode{id='10', parentId='8', name='科技园', children=null}, TreeNode{id='10', parentId='8', name='科技园', children=null}]}, TreeNode{id='9', parentId='2', name='宝安区', children=null}, TreeNode{id='8', parentId='2', name='南山区', children=[TreeNode{id='10', parentId='8', name='科技园', children=null}, TreeNode{id='10', parentId='8', name='科技园', children=null}]}, TreeNode{id='9', parentId='2', name='宝安区', children=null}]}
java list实现树形结构的更多相关文章
- 《Java数据结构》树形结构
树形结构是一层次的嵌套结构. 一个树形结构的外层和内层有相似的结构, 所以这种结构多可以递归的表示.经典数据结构中的各种树形图是一种典型的树形结构:一颗树可以简单的表示为根, 左子树, 右子树. 左子 ...
- Java数据封装成树形结构,多级
参考地址:https://blog.csdn.net/chendu500qiang/article/details/91493147 1.实体类 @data public class PublishS ...
- Java创建树形结构算法实例
在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构. 首先是需要的JavaBe ...
- 使用递归算法结合数据库解析成java树形结构
使用递归算法结合数据库解析成java树形结构 1.准备表结构及对应的表数据a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCHA ...
- java将list转为树形结构的方法
目录 1.通过转化成json封装数据 2.通过java8 stream转换 1.通过转化成json封装数据 原始数据如下 [ { "name":"甘肃省", & ...
- Java编程:将具有父子关系的数据库表数据转换为树形结构,支持无限层级
在平时的开发工作中,经常遇到这样一个场景,在数据库中存储了具有父子关系的数据,需要将这些数据以树形结构的形式在界面上进行展示.本文的目的是提供了一个通用的编程模型,解决将具有父子关系的数据转换成树形结 ...
- java 实现树形结构
package tree; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java ...
- java树形结构工具类
一.树形结构数据一般都是以子父id的形式存在数据库中,查询的时候只是带有子id和parent_id的List集合 并不是树形结构,所以我们现在要将普通的List集合转换为树结构数据(本工具类扩展操作树 ...
- JAVA获取树形结构
package com.nnmzkj.common.dto; import lombok.Data; import java.io.Serializable;import java.util.Arra ...
随机推荐
- shell脚本,在指定目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件。
[root@localhost wyb]# cat test10.sh #!/bin/bash #使用for循环在/test10目录下通过随机小写10个字母加固定字符串oldboy批量创建10个htm ...
- python 删除大表数据
#!/usr/bin/env python # encoding: utf-8 #@author: 东哥加油! #@file: del_tb_bigtable_statistic.py #@time: ...
- scheduleWithFixedDelay和scheduleAtFixedRate源码分析
先放张图,有兴趣的话我再加细节说明. scheduleWithFixedDelay和scheduleAtFixedRate的执行流程都是一样的,如下 ScheduledThreadPoolExecut ...
- JavaScript正则表达式-边界符
^:表示字符串开始位置,在多行匹配中表示一行的开始位置. /^\w+/匹配字符串中第一个单词. $:表示字符串结束的位置,在多行匹配中表示一行的结束位置. /\w+$/匹配字符串中最后一个单词. /@ ...
- python基础学习笔记——初识函数
什么是函数 我们目前为止,已经可以完成一些软件的基本功能了,那么我们来完成这样一个功能:约x 1 2 3 4 5 pint("拿出手机") print("打开陌陌&quo ...
- arrive 和reach 的区别
例如:He arrived yesterday. 没宾语的话就用arrive了reach作抵达讲时是及物动词,后面要宾语的 分清arrive和reach的区别arrive是不及物动词,后面不能直接加地 ...
- 【08】css sprite是什么,有什么优缺点
[08]css sprite是什么?有什么优缺点? 概念:将多个小图片拼接到一个图片中.通过background-position和元素尺寸调节需要显示的背景图案. 优点: 减少HTTP请求数,极大地 ...
- 百度蜘蛛IP段分析
大家进行网站日志分析的时候,常见到很多不同IP段的百度蜘蛛,为了方便大家更好的进行日志分析,下面列举了百度不同IP段常见蜘蛛的一些详情情况,及所谓的降权蜘蛛,沙盒蜘蛛,高权重蜘蛛等等 下面的百度蜘蛛I ...
- 使用pipework将Docker容器桥接到本地网络环境中
在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了.pipew ...
- Leetcode 413.等差数列划分
等差数列划分 如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列. 例如,以下数列为等差数列: 1, 3, 5, 7, 9 7, 7, 7, 7 3, -1, -5, -9 ...