2012-04-05 19 views
3

順序付けされた値のペアを追加/レンダリングするデータ構造を実装しようとしています。例えば。順序付けられた値のペアをフェッチする

orderedPair.add(value1, text1) 
orderedPair.add(value1, text2) 
orderedPair.add(value2, text3, data1) 
orderedPair.add(value2, data2) 
orderedPair.add(value1, text5) 

私が得るとき、私は彼らが唯一のキーに基づいた値とどのような私が取得しようとしていますを返すので、

value1, text1 
value1, text2 
value2, text3, data1 and so on. 

LinkedHashMapsまたはハッシュマップのいずれかの変異体が機能していないとして、それが反復的に返すようにしたいです値と値のペアです。値/テキストもデータも一意ではなく、キーに基づいて値を取得できない場合があります。また、ソートされたリストは必要ありません。オーダーされたリストだけが必要です。

質問は次のようになります。これを実現するために使用することができ、Javaの任意のデータ構造はありますか?

私は、この目的を果たすことの任意に遭遇しませんでした。この場合、私はこれを達成するカスタムコレクションを書くことについて熟考しています。どんな提案/助けも歓迎です。

+0

また、私は問題を誤解されるかもしれない2D配列 – conphident4

+0

を使用しないようにしようとしています:なぜだけではなく、 '一覧'フィットしますか? 'Tuple'はあなたが定義したクラスで、関連する要素型を保持していますか? – amit

+0

お返事ありがとうございました。2つまたは3つの値を持つクラスのようなものですか?例えば。 OrderedPair {ストリングs1;文字列s2; int i1;}しかし、私は実装する必要はない/リストのすべてのメソッドをオーバーライドとにかく? – conphident4

答えて

2

OPに有用であると思われますので、答えにコメントでの議論をラップ:

class Tupleを作成し、あなたのペア/トリプルになります。
このクラスは、固定数のパラメータで実装することも、オブジェクトのリストを保持するコンテナとして実装することもできます。

List<Tuple>でこれらのTupleオブジェクトを保持し、あなたが行われています。

またhashCode()equals()を実装し、それがこのクラスにComparable実装することができます - あなたは、このようなTreeSetHashSetなど他のコレクションとそれを使用することができます。

+0

がところでこれは私のお気に入り[タプル実装]である(https://github.com/ripper234/Basic/tree/master/java/src/main/java/org/basic/datastructures/tuple)...と[テスト] (https://github.com/ripper234/Basic/blob/master/java/src/test/java/org/basic/datastructures/tuple/TupleTester)。java) –

0

だけの各項目を書き出し、この関数は、出力用に続いて

をorderedPair.addされるだろう、地図を横断し、各エントリにツリーマップ

Map<Integer, List<Integer>> content = new Treemap<Integer, List<Integer>>(); 

if (not content.containsKey(value1)) { 
    content.put(value1, new LinkedList<Integer>()); 
} 
content.get(value1).add(text1) 

のように、リストの地図を使いますあなたは、それを注文したツリーマップコンストラクタにコンパレータを渡したいので、リスト

対応します。

+0

'Map 'であり、 'Map 'ではないことに注意してください。 '' TreeMap'と同じです。あなたは 'Set 'をお探しですか? – amit

+0

@amit:ありがとう。おそらくそれは今より明白でしょうか? – j13r

関連する問題