不用递归也来构造树型结构

某日有人问我怎样把类别表的数据在JAVA程序中构造。
第一答案就是递归咯~~~~
不过我一向不大记住以前的东西,所以另外想了个方法,就是借助Map把类别表的数据变成一棵树。


/**
* 我是节点类~~ 嘻嘻嘻~~~~
*/
public class Node {
//节点ID
private Integer nId;
//节点名称
private String nName;
//父节点ID
private Integer pId;
//子节点集合
private List<Node> cNodes;

public void addChild(Node node) {
if (cNodes == null) {
cNodes = new ArrayList<Node>();
}
cNodes.add(node);
}

// 下面的get set 方法就省略了。
}


public class Builder {

public void build() {
// 首先把需要记录取出来放到一个Map集合里。
// 比如在数据可以中取出
Map map = new xxxxMap();
Node node;
// 如何查询数据库中的数据就不写了。。
........
while (rs.next()) {
//创建节点对象
node = new Node();
node.nId = rs.getInt(1);
.......
// 创建好就添加到集合里
map.put(node.nId, node);
}

// 获取到所有数据后需要遍历一次map。
for (Node n : map.values()) {
// 用当前对象的父节点ID在map中找出父节点对象
if (!(node = map.get(n.pId)) == null) {
// 为父节点对象添加子节点
node.addChild(n);
}
}//循环完毕树形结构也就出来啦~~~~~
}
}



好吧我承认我是变相偷懒伪代码党
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值