我一直想知道创建在列表中的列表等中具有列表的对象的最佳实践是什么。假设我有这种对象:
root = new CarrierTreeNode(null,
new CarrierTreeNode[] {
new CarrierTreeNode(new CarrierTreeItem("item1"), new CarrierTreeNode[] {
new CarrierTreeNode(new CarrierTreeItem("item1.1"))
}),
new CarrierTreeNode(new CarrierTreeItem("item2"), new CarrierTreeNode[] {
new CarrierTreeNode(new CarrierTreeItem("item2.1"))
})
});
我想动态生成它,并动态访问和修改其中的列表/数组。有这方面的设计模式吗? 谢谢。
更清楚地说,这里使用的构造函数是这样的:node(item, node[])
最佳答案
您可能想看看复合模式。 简而言之,当对象 A 持有对象 A 的集合时使用此方法。
这种模式/数据结构允许简单的递归行为。
有很多来源,所以如果这还不够,只需去谷歌获取更多信息,但这里是一个开始: https://en.wikipedia.org/wiki/Composite_pattern
对于创建部分,在这种情况下我通常会使用工厂或构建器,但确切的实现有所不同。假设您有一个 2d 数组 if items,并且您想根据该数组创建这些节点。
public class NodeBuilder{
public CarrierTreeNode build(String[][] items){
CarrierTreeNode node = new CarrierTreeNode(null);
for(int i = 1; i < items.length; i++){
CarrierTreeNode nextNode = new CarrierTreeNode(new CarrierTreeItem(items[i][0]));
node.addNextNode(nextNode);
for(int j = 1; j < items[i].length; j++)
nextNode.addNextNode(new CarrierTreeItem(items[i][j]));
}
return node;
}
}
这显然只适用于 3 层结构。递归方法是优选的。您可以创建一个系统,其中构建调用构建 n 次,以创建您想要的深度。问题在于获取数据,为了使其正常工作,数据必须已经处于正确的结构中,但就像字符串一样。 如果您的字符串是动态生成的,以便构建器可以计算出数据,则可以使其工作。
关于java - java中如何创建树型对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35009373/