在链接的hashmap中 是否有任何方法只通过提供V来获得K的值? 我在互联网上搜索过,到目前为止我只找到了获取密钥的循环。
答案 0 :(得分:4)
没有
地图的要点是将V与特定的K相关联,而不是相反。您必须线性地遍历每个K / V对(您的循环)。
如果这是一个常见的操作,你需要创建另一个方向的第二个映射(并且可能将它们包装在一个抽象出来的类中)。当然,如果你不是在讨论独特的价值观,那就太难了。
答案 1 :(得分:1)
地图不打算以这种方式使用,请参阅@Brian Roach的回答。您应该考虑用其他东西替换该Map,或者考虑反转其键/值。
无论如何,你可以通过这种方式找到对应于valueToFind的键:
if (map.containsValue(valueToFind)) {
for (final Object /* whatever you use, your 'K' type */ entry : map.keySet()) {
if (map.get(entry) == valueToFind) {
//You found one key containing valueToFind
//Keep searching, there may be others
}
}
}
答案 2 :(得分:1)
没有任何东西比带有香草LinkedHashMap
的循环更好,但这里有一些Guava的替代品......
如果您知道自己的值是唯一的,则BiMap
API可以有效地支持逆查找,而无需手动维护向后的地图。使用HashBiMap
作为您的实现,您可以使用bimap.inverse().get(value)
从值中查找密钥。
如果您的值不是唯一,则可能会构建一个Multimap
,将每个值映射到其每个关联的键。您可以使用
Multimap<V, K> reverse = Multimaps.invertFrom(
Multimaps.forMap(map),
HashMultimap.<V, K> create());
可让您使用reverse.get(value)
查找与值关联的所有键。