问题:
假设有一个XML文件,其中包含应用程序感兴趣的某些元素的数据和层次结构:

  <root>
    <node title="lvl1Node">
        <node title="lvl2Node">
            <node title="lvl3Node"></node>
        </node>
    </node>
    <node title="lvl1Node2"></node>
    <node title="lvl1Node3">
        <node title="lvl2Node2">
            <node title="lvl3Node2">
                <node title="lvl4Node"></node>
            </node>
        </node>
    </node>
  </root>


现在,假设您的应用程序需要提供一个API来检索这些节点。您需要编写一个返回节点而又不丢失有关其层次结构信息的方法。

我的问题是你会怎么做?您将使用哪种数据类型。
树数据类型是很明显的答案,但标准的Collections API中未提供,并且自己编写始终是万不得已的方法(程序员很懒,重新发明了轮子等等)。

我还想到了一个ArrayList,其中每个项目要么是一个Object(对于不带子节点的节点),要么是Arraylist(对于具有子节点的节点),但是我喜欢泛型,这太像黑客了。
有聪明的方法吗?

最佳答案

您应该问自己的第一个问题是如何访问数据?深度优先迭代?搜索特定值?

乍一看,这是一棵节点树,其中每个节点可以有零个或多个子节点。

所以它是这样的:

class Node {
  Node parent;
  List<Node> children;
}


这就像一个链表,但是每个节点都可以分支成任意数量的子代。如果您需要直接通过ID查找项目,最好的选择是保留单独的哈希图索引。

关于java - Java中的层次结构和数据结构(或XML到对象的转换:最佳实践),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/719674/

10-14 12:05
查看更多