表转树结构

树结构代码:

/**  
 * @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);
			}
		}
	}
}

待优化,已使用节点仍然会再次遍历判断,浪费时间

猜你喜欢

转载自blog.csdn.net/u014536047/article/details/88913659
今日推荐