containsValue
您可以迭代myMap.entries()而不是使用它,它返回所有键值对的集合。返回的集合生成的迭代器遍历一个键的值,然后是第二个键的值,依此类推:
Integer toFind = new Integer(1);
for (Map.Entry<String, Integer> entry: myMap.entries()) {
if (toFind.equals(entry.getValue())) {
// entry.getKey() is the first match
}
}
// handle not found case
如果您查看它的实现,containsValue
它只是迭代地图的值,因此使用map.entries()
而不是执行此操作的性能map.values()
应该大致相同。
public boolean containsValue(@Nullable Object value) {
for (Collection<V> collection : map.values()) {
if (collection.contains(value)) {
return true;
}
}
return false;
}
当然,在一般情况下,给定值不一定有唯一键,因此除非您知道在地图中每个值仅针对单个键出现,否则您需要指定行为,例如,如果您想要第一个键或最后一个键钥匙。