2012-10-05 19 views
5

Javaのリストを2次元として扱う方法はありますか?Javaの2次元リスト

状況: ノードあたりのエッジ、エッジ、およびウェイトのグラフがあります。今、私は、各ノードのために格納するデータ構造が必要になります。 a)は、その隣接 b)のエッジの重み各neigbourため

まず私は、二のようなidentifyerと何かを新しいクラス「ノード」を作成する考え近隣アイデンティティおよびエッジ重みを格納するための2次元アレイを提供する。しかし、各ノードの近隣ノードの数は与えられず、実行時に動的に増加する可能性があります。したがって、私は二次元配列はここに行く方法ではないと思います。

私はクラス「ノード」でのようなリスト持つことが可能だろうと思った:

List<node> neighbours = new ArrayList<node>(); 

をしかし、明らかに、これは唯一の隣接ノードハンドル - ない彼らのエッジの重みを。

このような「グラフ」を構築する方法を知っている人はいますか?どこのノードでもネイバーの識別名と対応するエッジの重みが格納されていますか?

+0

2次元配列を実行しますが、それを実装する場合、2D配列の方法は必要ではなく、あなたは柔軟です。 javaでMAPSを使用することをお勧めしますか? http://docs.oracle.com/javase/6/docs/api/java/util/Map.html –

+2

類似:http://stackoverflow.com/questions/745048/looking-for-a-simple- Java-api-for-creating-graphs-edges-nodes – yiannis

+0

[JGraphT](http://jgrapht.sourceforge.net/)はすばらしく、Javaのマップに代わる素晴らしいツールです! – coroner

答えて

4

ほとんどストレートフォワード:-)お読みいただきありがとうございましたHashMapを使用することです。 '接続' はどこ

List<Connection> connections = new ArrayList<Connection>(); 

class Edge { 
// represents edge with destination node and it's weight 
     private final Node node; 
     private final int weight; 

     Edge(Node node, int weight) { 
      this.node = node; 
      this.weight = weight; 
     } 

    } 

// represents map which holds all outgoing edges keyed by source nodes. 
    Map<Node, Set<Edges>> edgesByOutgoingNodes = new HashMap<Node, Set<Edges>>(); 
+0

@coroner HashMapは行く道です;-) –

+0

ありがとうございます! :-) – coroner

0

あなたはこのような何かを行うことができます

Class Connection { 
    private int weight; 
    private Node node; 

    .... add getters/setters here .... 
} 
0

GuavaのTableインターフェイスが使用されている可能性があります。私はそれを使用したことはありませんでしたが、それは良いと聞いたことがあります。このcreateメソッドは、いくつかの使用可能性があります