层次结构& Java中的数据结构(或XML到对象的转换:最佳实践)

时间:2009-04-05 20:51:34

标签: java data-structures oop

问题: 假设有一个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(对于带有子节点的节点),但我喜欢泛型,这感觉太像黑客了。 有更聪明的方法吗?

4 个答案:

答案 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中