Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Простая головоломка Java Map

Автор вопроса: Kevin BourrillionОтветов: 3

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

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

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

  • Есть по крайней мере один лучший ответ. - Нет, это один "лучший" ответ по определению ... jjnguy 06.11.2009
  • Кевин, если вы собираетесь задавать подобные вопросы, вам нужно установить несколько лучших правил. В противном случае это действительно не вопрос, на который можно дать достаточный ответ. jjnguy 06.11.2009
  • Хорошо, я пытаюсь. См. Редактировать. Однако мне интересно ваше определение лучшего. Если четыре карты моей покерной руки - это 2 трефы, 3 трефы, туз пик, туз червей, какая лучшая пятая карта у меня может быть? Kevin Bourrillion 06.11.2009
  • Что ж, я понимаю, что вы имеете в виду, но лучшей картой в этом случае будет туз. jjnguy 06.11.2009
  • Мне любопытно различие полноты / правильности. Действительно ли неполное решение правильно? Laurence Gonsalves 06.11.2009
  • Да, Лоуренс, почему-то я не думаю, что именно это решает все мои головоломки. :) Kevin Bourrillion 06.11.2009

javacollectionspuzzle

Ответы

Ответ 1 · рейтинг 3 · Community

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 · notnoop

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.

Ответ 3 · harto

Предположительно, он должен вернуть boolean:

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы