树结构代码:
/**
* @Title: TreeNode.java
* @Package demo
* @Description: TODO(用一句话描述该文件做什么)
* @author: zcx
* @date: 2019年3月30日 下午3:20:06
* @version V1.0
*
*/
package demo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName: TreeNode
* @Description:TODO(这里用一句话描述这个类的作用)
* @author: zcx
* @date: 2019年3月30日 下午3:20:06
*
*/
public class TreeNode implements Serializable {
//唯一id
private String code;
//父id
private String parentCode;
//描述
private String name;
//子树
List<TreeNode> children = new ArrayList<>();
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getParentCode() {
return parentCode;
}
public void setParentCode(String parentCode) {
this.parentCode = parentCode;
}
public List<TreeNode> getChildren() {
return children;
}
public void setChildren(List<TreeNode> children) {
this.children = children;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* @Title: TreeNode
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @param code
* @param: @param parentCode
* @param: @param name
* @param: @param children
* @throws
*/
public TreeNode(String code, String parentCode, String name) {
this.code = code;
this.parentCode = parentCode;
this.name = name;
}
@Override
public String toString() {
return "TreeNode [code=" + code + ", parentCode=" + parentCode + ", name=" + name + ", children=" + children
+ "]";
}
}
表list数据转树:
/**
* @Title: MakeTree.java
* @Package demo
* @Description: TODO(用一句话描述该文件做什么)
* @author: zcx
* @date: 2019年3月30日 下午3:20:37
* @version V1.0
*
*/
package demo;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName: MakeTree
* @Description:TODO(这里用一句话描述这个类的作用)
* @author: zcx
* @date: 2019年3月30日 下午3:20:37
*
*/
public class MakeTree {
/**
* @Title: main
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @param args
* @return: void
* @throws
*/
public static void main(String[] args) {
List<TreeNode> list = new ArrayList<TreeNode>() {
{
add(new TreeNode("1", "", "中国"));
add(new TreeNode("2", "", "日本"));
add(new TreeNode("3", "1", "上海"));
add(new TreeNode("4", "2", "东京"));
add(new TreeNode("5", "3", "徐汇"));
add(new TreeNode("7", "1", "四川"));
add(new TreeNode("6", "6", "乐山"));
}
};
TreeNode treeNode = new TreeNode("", null, "根节点");
getNodes(treeNode, list);
System.out.println(treeNode.toString());
}
private static void getNodes(TreeNode treeNode, List<TreeNode> list) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getParentCode().equals(treeNode.getCode())) {
treeNode.getChildren().add(list.get(i));
getNodes(list.get(i), list);
}
}
}
}
待优化,已使用节点仍然会再次遍历判断,浪费时间