2009-07-09 3 views
1

私は、指定された値にマップされたすべてのキーを返すメソッドを持つjava.util.Mapの実装を探しています。つまり、複数のキーが同じ値。私はGoogle CollectionsとApache Commonsを見て、何も気付かなかった。もちろん、私はキーセットを繰り返し、それぞれの対応する値をチェックしたり、2つのマップを使用したりできましたが、既に用意されているものがあることを期待していました。getKeysForValueをサポートするJavaマップの実装を探しています

答えて

2

その解決策があなたには良いのかどうかはわかりませんが、キーから値への標準マップを使用し、値からキーへのMultiMapを簡単に実装できます。

マップからキーを削除すると、2つの構造体IEの同期化に注意する必要があります。マルチマップの値にマップされたキーのセットからキー自体を削除する必要があります。

実装するのは難しくないかもしれません。おそらくメモリオーバーヘッドの面から少し重いかもしれません。

+0

ありがとうございました。私は2つのマップを使用することを考えました。 1つのマップに実装があるといいですが、2つのマップを同期させておくことについて心配する必要はありません。 – Joel

+0

実装が存在しないように見えるので、これが最善の方法です。 – Joel

1

bidirectional mapは、commons collectionsに実装されています。

+0

実際には双方向マップは機能しません。私はそれを明確にするために質問を編集しましたが、キーと値の間に1対1のマッピングはありません。 – Joel

0

値オブジェクトには、すべてのキーを保持するプロパティ(ArrayList多分型の)があります。 次に、HashMap(または使用するマップインプリメンテーション)を拡張し、putをオーバーライドして、キーを配置してオブジェクト化するときに、そのキーをオブジェクトのキーリストに追加するようにします。

0

複数のキーを持つ値をサポートする既成のクラスが見つかりません。ただし、Apache Commons DualHashBidiMapを再実装するには、HashMapsの代わりにMultiHashMapを使用します。

関連する問題