问题:
假设有一个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/