java - java中如何创建树型对象?

标签 java tree nested

我一直想知道创建在列表中的列表等中具有列表的对象的最佳实践是什么。假设我有这种对象:

    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/

相关文章:

java - 为 Cloud Endpoints 类生成 API 元数据失败

java - 过滤自动完成适配器的 json 结果

c - 如果给你两个遍历序列,你能构造二叉树吗?

php - 在 HTML 表格中显示嵌套数组

sql - H2,如何使用嵌套选择进行更新?

java.lang.NumberFormatException: ForInputString"7110332507339"java.sql.SQLException: 索引处缺少 IN 或 OUT 参数::4

java - 以有效的方式从 Map 中删除多个键?

java - 如何统计树中某个元素的出现次数?

clojure - Clojure 树函数中的子树总计

java - 递归时的操作顺序是什么?