java list 树_java list实现树形结构

1.javabean

import java.util.List;

public class TreeNode {

private String id;

private String parentId;

private String name;

private List 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 getChildren() {

return children;

}

public void setChildren(List 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 bulid(List treeNodes) {

List trees = new ArrayList();

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.getChildren().add(it);

}

}

}

return trees;

}

/**

* 使用递归方法建树

* @param treeNodes

* @return

*/

public static List buildByRecursive(List treeNodes) {

List trees = new ArrayList();

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 treeNodes) {

for (TreeNode it : treeNodes) {

if(treeNode.getId().equals(it.getParentId())) {

if (treeNode.getChildren() == null) {

treeNode.setChildren(new ArrayList());

}

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 list = new ArrayList();

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 trees = TreeBuilder.bulid(list);

for (int i = 0; i < trees.size(); i++) {

System.out.println(trees.get(i));

}

List trees_ = TreeBuilder.buildByRecursive(list);

for (int i = 0; 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}]}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值