Java HashMap反向方式

时间:2017-09-29 06:47:54

标签: java collections hashmap

我需要在两种物体之间有一个地图,比如说,为了演示目的,字符串和长。

我知道HashMap具有O(1)搜索性能,这很棒。我正在使用这样的东西:

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

当我想通过密钥搜索时,这很有用。但是,现在我还需要找到按值搜索的键。

如果我开始迭代密钥,那么我将失去性能。

我想到的第一个选择是反过来创建另一个HashMap。

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

每当我写一个,写在另一个。

是否有一个特定的类能够通过键和值进行搜索,具有如此出色的性能?

我应该用两个HashMaps创建自己的类吗?

还有其他解决方案吗?

2 个答案:

答案 0 :(得分:6)

您可以使用番石榴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"

答案 1 :(得分:0)

Java本身并没有提供任何东西,但是Guava有BiMap,它有一个反向视图,支持有效的反向查找。