簡體   English   中英

Java中的層次結構和數據結構(或XML到對象的轉換:最佳實踐)

[英]Hierarchy & data structure in Java (or XML to Object conversion: best practices)

問題:假設有一個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查找項目,最好的選擇是保留單獨的哈希圖索引。

呃。 您究竟需要DOM未涵蓋的內容?

如果每個項目都有標題,則可以使用地圖代替列表。 使訪問每個項目更加直觀(使用節點的名稱而不是索引)。

上一次我需要樹結構時-我作弊並使用了樹模型 它不是很漂亮(涉及拉入Swing),但效果確實很好! 遺憾的是他們沒有將其放入Collections API中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM