重複の可能性:
Map <K1、K2、V>の実装、つまり2つのキー?
名前とIDをキーと値のペアとして保存する必要があります。ただし、プログラムで名前とIDの両方で検索する必要がある場合があります。2つのHashMapを作成したくない(またはname-idとid-nameのペアを格納することでメモリ消費量を2倍にしたい)
そのための適切なデータ構造は何ですか?このためのJavaの標準実装はありますか?
重複の可能性:
Map <K1、K2、V>の実装、つまり2つのキー?
名前とIDをキーと値のペアとして保存する必要があります。ただし、プログラムで名前とIDの両方で検索する必要がある場合があります。2つのHashMapを作成したくない(またはname-idとid-nameのペアを格納することでメモリ消費量を2倍にしたい)
そのための適切なデータ構造は何ですか?このためのJavaの標準実装はありますか?
guavaのBiMapも使用できます。そして、逆マップを取得するのは次のように簡単です。
BiMap<Integer, String> biMap = HashBiMap.create();
biMap.put(1, "a");
biMap.put(2, "b");
BiMap<String, Integer> invertedMap = biMap.inverse(); //to get the name,id map
唯一の制約は、キーと値が一意である必要があるということです。
Commons-Collectionsには、使用できるBidiMapがあります。
http://commons.apache.org/collections/apidocs/org/apache/commons/collections/BidiMap.html
GuavaにはHashBiMap
、マッピングの両方向を追跡する機能があります。現在、その実装は基本的HashMap
に各方向を維持しますが、次のリリースではカスタムデータ構造を使用してメモリを約38%節約します。
基本的に、重複する値を拒否することを除いて、とHashBiMap
まったく同じように動作しMap
、を呼び出すことで他の方向(キーへの値)のビューを取得できますinverse()
。
(開示:私はグアバに貢献します。)