简单的Java地图拼图

时间:2009-11-06 05:14:12

标签: java collections puzzle

这种通用库方法的最佳实现是什么?

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

与大多数编码难题一样,判断此谜题的标准依次为:

  1. 完整性
  2. 正确性
  3. 性能
  4. 美容
  5. 收到PayPal捐款
  6. 修改

    好吧,既然关闭了,我不妨发布答案。我认为这可能是最佳的:

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

    它确实分配了一个实例,但它为地图实现提供了更多机会来做一些最佳的事情。

2 个答案:

答案 0 :(得分: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);
}

<强> Copied from deleted post.

答案 1 :(得分: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);
}