[英]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.