使用する代わりに、すべてのキーと値のペアのコレクションを返すmyMap.entries()containsValue
を反復処理できます。返されたコレクションによって生成されたイテレータは、1つのキーの値をトラバースし、次に2番目のキーの値をトラバースします。
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;
}
もちろん、一般的なケースでは、特定の値に一意のキーが必ずしも存在するわけではないため、マップで各値が単一のキーに対してのみ発生することがわかっている場合を除き、最初のキーまたは最後のキーが必要な場合など、動作を指定する必要があります。鍵。