我需要在两种物体之间有一个地图,比如说,为了演示目的,字符串和长。
我知道HashMap具有O(1)搜索性能,这很棒。我正在使用这样的东西:
HashMap<String, Long> a = new HashMap<String, Long>();
当我想通过密钥搜索时,这很有用。但是,现在我还需要找到按值搜索的键。
如果我开始迭代密钥,那么我将失去性能。
我想到的第一个选择是反过来创建另一个HashMap。
HashMap<Long, String> reverseA = new HashMap<Long, String>();
每当我写一个,写在另一个。
是否有一个特定的类能够通过键和值进行搜索,具有如此出色的性能?
我应该用两个HashMaps创建自己的类吗?
还有其他解决方案吗?
答案 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,它有一个反向视图,支持有效的反向查找。