在一个链接的哈希映射中,是否有一种方法只提供V就能获取K的值?
我已经在互联网上搜索了很久,到目前为止我只找到了通过循环获取键的方法。
不是通过V来找K,而是通过K来关联V,这就是Map的意义。你需要逐一遍历每个K/V对(使用循环)。
如果这是一个常见的操作,你可能需要创建第二个Map以实现反向查询(可能要用一个类将两个Map封装起来)。当然,如果你不考虑唯一性,这会有些棘手。
没有比使用普通的 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)
,您可以查找与值关联的所有键。
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
}
}
}