26

この汎用ライブラリ メソッドの最適な実装は何ですか?

public static <K, V> boolean containsEntry(
    Map<K, V> map, K key, V value) {}

ほとんどのコーディング パズルと同様に、このパズルの判断基準は次のとおりです。

  1. 完全
  2. 正しさ
  3. パフォーマンス
  4. 美しさ
  5. PayPal 拠出金の受領

編集:

では、締め切らせていただきましたので、回答を投稿させていただきます。これはおそらく最適だと思います:

  V valueForKey = map.get(key);
  return (valueForKey == null)
      ? value == null && map.containsKey(key)
      : valueForKey.equals(value);

巧妙で単純な解決策は次のとおりです。

  return map.entrySet().contains(
      new AbstractMap.SimpleImmutableEntry<K, V>(key, value));

インスタンスを割り当てますが、マップの実装に最適な処理を行う機会が少し増えます。

4

3 に答える 3

3
public static <K, V> boolean containsEntry(Map<K, V> map, K key, V value) {
    returns map.containsKey(key) && isEqual(map.get(key), value);
}
private static boolean isEqual(Object a, Object b) {
    return a == null ? a == b : a.equals(b);
}

削除された投稿からコピーされました。

于 2009-11-06T05:41:34.853 に答える
0

おそらくそれは:を返すことを意味しbooleanます

public static <K, V> boolean containsEntry(Map<K, V> map, K key, V value) {
    return map.containsKey(key) && map.get(key).equals(value);
}
于 2009-11-06T05:41:25.427 に答える
0
public static <K, V> boolean containsEntry(Map<K, V> map, K key, V value) {
    returns map.containsKey(key) & isEquals(map.get(key), value);
}
private static boolean isEqual(Object a, Object b) {
    return a == null ? a == b : a.equals(b);
}

isEqual メソッドをインライン化することもできます。

于 2009-11-06T05:20:28.170 に答える