Подтвердить что ты не робот

Простая Java-карта

Какова наилучшая реализация этого универсального библиотечного метода?

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

Критерии оценки этой головоломки, как и для большинства головоломок, находятся в следующем порядке:

  • Полнота
  • Корректность
  • Производительность
  • Красота
  • Получение вклада PayPal

EDIT:

Хорошо, так как он закрылся, я мог бы также опубликовать ответ. Я думаю, что это, вероятно, оптимально:

  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));

Он выделяет экземпляр, но дает реализацию карты немного больше возможностей сделать что-то оптимальное.

4b9b3361

Ответ 1

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);
}

Скопировано из удаленной записи.

Ответ 2

Предположительно это означало вернуть boolean:

public static <K, V> boolean containsEntry(Map<K, V> map, K key, V value) {
    return map.containsKey(key) && map.get(key).equals(value);
}