代码之家  ›  专栏  ›  技术社区  ›  Kevin Bourrillion Gergely

简单Java地图拼图[关闭]

  •  25
  • Kevin Bourrillion Gergely  · 技术社区  · 15 年前

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

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

    1. 正确性
    2. 性能
    3. 收到贝宝捐款

    编辑:

    既然已经关门了,我还是把答案贴出来吧。我认为这可能是最佳的:

      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 回复  |  直到 14 年前
        1
  •  3
  •   David Sykes    8 年前
    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.

        2
  •  0
  •   notnoop    15 年前
    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
  •  0
  •   harto    15 年前

    boolean :

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