2017-09-29 4 views
2

私は2種類のオブジェクト間のマップを持っている必要があります、実証目的のために、StringとLong。Java HashMapの逆の方法

私はHashMapがO(1)検索パフォーマンスを持っていることを知っています。これは素晴らしいことです。私はこのようなものを使用しています:

HashMap<String, Long> a = new HashMap<String, Long>(); 

これは、キーで検索したいときに効果的です。しかし、今では価値のあるキーを見つける必要があります。

キーの反復処理を開始すると、パフォーマンスが低下します。

私が考えている最初のオプションは、別の方法で別のHashMapを作成することです。

私が1つ書くときはいつも、もう一方に書きます。

キーや値で検索するための特別なクラスはありませんか?

両方のHashMapsで自分のクラスを作成する必要がありますか?

他のソリューション?

+0

おそらく、グァバの[2領域マップ](https://github.com/google/guava/wiki/NewCollectionTypesExplained#bimap)には、探しているものが含まれています。 – Henrik

+0

もちろんキーはユニークで値はそうではないかもしれません –

+0

@ScaryWombat:「reverseA」マップがオプションの場合、値がより一意になるか、矛盾が生じます。 – Henrik

答えて

5

あなたはグアバBiMapを使用することができます。

BiMap<String, Long> map = HashBiMap.create(); 
map.put("a", 1L); 
map.put("b", 2L); 
map.put("c", 3L); 

System.out.println(map.get("b")); // 2L 
System.out.println(map.inverse().get(2L)); // "b" 

他の代替は、Apache CommonsのBidiMap次のとおりです。

BidiMap<String, Long> map = new DualHashBidiMap<>(); 
map.put("a", 1L); 
map.put("b", 2L); 
map.put("c", 3L); 

System.out.println(map.get("b")); // 2L 
System.out.println(map.inverseBidiMap().get(2L)); // "b" 
0

Java自体は何も提供していませんが、Guavaは効率的な逆引き参照をサポートする逆ビューを持つBiMapです。

関連する問題