非递归,内存中组装对象树
有这样一个树形结构:
id,name,fatherId
1 A null
2 b 1
3 c 1
4 d 2
对这样一张表我们需要将它组装成一个对象树。
1)我们可以查询数据库的时候进行递归,这样就会有很多发出很多条sql,效率很低;
2)另一种方式我们先用一条sql把数据查出来,然后在内存中递归,这种方式要比递归数据库节省很多时间;
上面两种情况都不太理想,这里我们说说另外一种思路:
1)首先一条sql从数据中查询出所有数据List<Node> nodeList;
2)循环nodeList将其放入一个Map<String,Node> map中;其中key是id
3)
for(Node node: nodeList){
Node fatherNode = map.get(node.getFatherId().toString());
if(null != fatherNode)
fatherNode.getNodeChildren().add(map.get(node.getId().toString()));
}
这样一个循环下来之后,从map中拿到的任何对象都是一颗对象树,因为我们循环的是List,所以对象树也是有序的。