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}]}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM