【问题标题】:Java : How to compare map keyset with set? [duplicate]Java:如何将地图键集与集合进行比较? [复制]
【发布时间】:2016-05-26 13:10:30
【问题描述】:

我有一个地图(称为masterMap)和一个集合。

masterMap 包含这些值 - {1537=OK, 1538=OK, 1539=OK, 4003=OK}

Set selectedSet =new HashSet();
selectedSet.add(Integer.parseInt("4003"));
boolean compareMapAndSet=masterMap.keySet().equals(selectedSet);

但是,即使地图中存在 4003,compareMapAndSet 始终是 false

比较有什么问题?

【问题讨论】:

  • 呃,他们不相等。 selectedSet 不包含 1537、1538 或 1539。
  • 为什么一个元素的集合应该等于4个元素的集合?
  • 它们总是不同的对象。如果您只需要存在相关的特定值,则需要比较实际内容是否相等,或者使用 contains 或其他内容。

标签: java dictionary set hashset


【解决方案1】:

equals 比较对象是否相等。它不检查第二组是否是第一组的子集。要获得该功能,您应该使用containsAll

boolean compareMapAndSet=masterMap.keySet().containsAll(selectedSet);

【讨论】:

    【解决方案2】:

    来自集合 public boolean equals(Object o)

    比较指定对象与此集合是否相等。 如果给定对象也是一个集合,则返回true,这两个集合具有相同的大小,并且给定集合的每个成员都包含在这个集合中。这可确保 equals 方法在 Set 接口的不同实现中正常工作。
    这个实现首先检查指定的对象是否是这个集合;如果是,则返回 true。然后,它检查指定的对象是否是一个集合,其大小与该集合的大小相同;如果不是,则返回 false。如果是,则返回 containsAll((Collection) o)。

    注意:但在您给定的示例中,您的 selectedSet 没有相同的元素。

    我想你想检查selectedSet 集合中的所有元素是否是masterMap.keySet() 的一部分

    为此,您必须迭代设置 selectedSet 并在 masterMap.keySet() 中检查它是否存在。如下代码:

    boolean compareMapAndSet = checkSubSet(masterMap.keySet(), selectedSet);
    private static boolean checkSubSet(Set<Integer> keySet, Set<Integer> selectedSet) {
        for (Integer integer : selectedSet) {
            if (!keySet.contains(integer)) {
                return false;
            }
        }
        return true;
    }
    

    查看输出result

    【讨论】:

      猜你喜欢
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多