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实现树形结构的更多相关文章

  1. 《Java数据结构》树形结构

    树形结构是一层次的嵌套结构. 一个树形结构的外层和内层有相似的结构, 所以这种结构多可以递归的表示.经典数据结构中的各种树形图是一种典型的树形结构:一颗树可以简单的表示为根, 左子树, 右子树. 左子 ...

  2. Java数据封装成树形结构,多级

    参考地址:https://blog.csdn.net/chendu500qiang/article/details/91493147 1.实体类 @data public class PublishS ...

  3. Java创建树形结构算法实例

    在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构. 首先是需要的JavaBe ...

  4. 使用递归算法结合数据库解析成java树形结构

    使用递归算法结合数据库解析成java树形结构 1.准备表结构及对应的表数据a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCHA ...

  5. java将list转为树形结构的方法

    目录 1.通过转化成json封装数据 2.通过java8 stream转换 1.通过转化成json封装数据 原始数据如下 [ { "name":"甘肃省", & ...

  6. Java编程:将具有父子关系的数据库表数据转换为树形结构,支持无限层级

    在平时的开发工作中,经常遇到这样一个场景,在数据库中存储了具有父子关系的数据,需要将这些数据以树形结构的形式在界面上进行展示.本文的目的是提供了一个通用的编程模型,解决将具有父子关系的数据转换成树形结 ...

  7. java 实现树形结构

    package tree; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java ...

  8. java树形结构工具类

    一.树形结构数据一般都是以子父id的形式存在数据库中,查询的时候只是带有子id和parent_id的List集合 并不是树形结构,所以我们现在要将普通的List集合转换为树结构数据(本工具类扩展操作树 ...

  9. JAVA获取树形结构

    package com.nnmzkj.common.dto; import lombok.Data; import java.io.Serializable;import java.util.Arra ...

随机推荐

  1. Lucene原理与代码分析

    http://www.cnblogs.com/forfuture1978/category/300665.html

  2. XML解析(二) SAX解析

    XML解析之SAX解析: SAX解析器:SAXParser类同DOM一样也在javax.xml.parsers包下,此类的实例可以从 SAXParserFactory.newSAXParser() 方 ...

  3. How To:Linux下如何通过命令检查网卡是否插上网线

    主要工具为ethtool来检查,主要关注的字段为"Link detected",注意如下的输出,其中em4实际物理上并未插上网线,而em1是插上网线的: # ethtool em4 ...

  4. Vue开发微信公众号默认背景为灰色

    最近公司有一个项目,使用Vue开发微信公众号,开发过程遇到一个问题,即设计图的整体背景是白色的,但是公众号里默认的背景是浅灰色,如果某个页面高度没能占满一屏,就会露出浅灰色的默认背景,会显得很不协调. ...

  5. Vue—事件修饰符

    Vue事件修饰符 Vue.js 为 v-on 提供了事件修饰符来处理 DOM 事件细节,如:event.preventDefault() 或 event.stopPropagation(). Vue. ...

  6. day23 03 组合的例子

    day23 03 组合的例子 一.用到组合的方式,编写一个圆环,并能够计算出它的周长和面积 from math import pi # 从内置函数里面导入pi # 先定义一个圆类 class Circ ...

  7. grep理解

    http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html部分摘录于此 grep与正规表达式  字符类 字符类的搜索:如果我想要搜 ...

  8. Luogu 2569 [SCOI2010]股票交易 (朴素动规转移 + 单调队列优化)

    题意: 已知未来 N 天的股票走势,第 i 天最多买进 as [ i ] 股每股 ap [ i ] 元,最多卖出 bs [ i ] 股每股 bp [ i ] 元,且每天最多拥有 Mp 股,且每两次交易 ...

  9. 【js】--常用DOM库工具

    /* 2014年3月16号 常用DOM工具库*/var DOM={}; DOM.getElesByClass=function (strClassName,context){ if(typeof st ...

  10. POJ-2318 TOYS,暴力+叉积判断!

                                                                 TOYS 2页的提交记录终于搞明白了. 题意:一个盒子由n块挡板分成n+1块区 ...