2009-04-05 16 views
0

問題: のは、データとアプリケーションへの関心の特定の要素の階層の両方が含まれているXMLファイルがあるとしましょう:階層&データ構造Javaで

<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では提供されていません。それを自分で書くことは、常に最後の手段です(プログラマは怠惰で、ホイールを再開発するなど)。

また、各項目がObject(サブノードのないノードの場合)またはArraylist(サブノードのあるノードの場合)のいずれかのArrayListを考えましたが、ジェネリックが好きで、これはハッキングのように感じます。 より洗練された方法がありますか?

答えて

1

最初に質問する必要があるのは、どのようにデータにアクセスする必要があるのですか?深さ優先の繰り返し?特定の値を検索しますか?

これは一見、各ノードが0個以上の子を持つことができるノードのツリーです。

は、だから、このような何かを行く:

class Node { 
    Node parent; 
    List<Node> children; 
} 

それは、リンクリストのようなものだが、各ノードは子供の任意の数に出て分岐することができます。あなたがIDで直接項目を見つける必要がある場合、最良の方法は、別々のハッシュマップインデックスを保持することです。

+0

... DOMのように疑わしいように見えます。 –

+0

DOMが何を意味するのか正確にはわかりませんが、ある場所で文書を解析し、そこからデータを抽出し、コード内の別の場所で利用できるようにする必要があることがあります。実際には構造をシミュレートしてデータを保存するので、これは実際には最適なソリューションです。 – javito

+0

このようにしてXMLにアクセスするためのAPIがすでに存在しており、Document Object Modelと呼ばれています。 http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXPDOM.html –

0

各項目にタイトルがある場合は、リストの代わりにマップを使用できます。各項目へのより直感的なアクセスを可能にします(インデックスの代わりにノードの名前を使用)。

+0

マップを使用する場合、どのノードがサブノードであり、その親は誰であるかをどのように知ることができますか?私は階層に関する情報を失うだけでなく、一意の名前(タイトル)について心配する必要があります。 – javito

+0

マップをマップに配置して、階層を維持することができます。 – CookieOfFortune

0

最後に私はツリー構造が必要でした - 私はTree Modelを騙して使用しました。それはかなり(スイングを引くことを含む)が、それは本当にうまく動作します!コレクションAPIにこれを入れていなかったことは残念です

1

Err。 DOMでカバーされていない正確なものは何ですか?

関連する問題