问题: 假设有一个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(对于带有子节点的节点),但我喜欢泛型,这感觉太像黑客了。 有更聪明的方法吗?
答案 0 :(得分:1)
您应该问自己的第一个问题是如何访问数据?深度优先迭代?搜索特定值?
乍一看,这是一个节点树,每个节点可以有零个或多个子节点。
所以它是这样的:
class Node {
Node parent;
List<Node> children;
}
它就像一个链表,但每个节点都可以分支成任意数量的子节点。如果你需要通过id直接找到项目,最好的办法是保持一个单独的hashmap索引。
答案 1 :(得分:1)
ERR。你还需要DOM没有涵盖哪些内容?
答案 2 :(得分:0)
如果每个项目都有标题,那么您可以使用地图而不是列表。使访问每个项目更直观(使用节点的名称而不是索引)。
答案 3 :(得分:0)
我最后一次需要Tree结构 - 我欺骗并使用了Tree Model。它不漂亮(涉及拉入Swing)但它的效果非常好!遗憾的是他们没有把它放在Collections API中