Java:如何比较map keyset和set?

时间:2016-05-26 13:10:31

标签: java dictionary set hashset

我有一张地图(名为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

比较有什么问题?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

来自集合 public boolean equals(Object o)

  

将指定对象与此集进行相等性比较。 如果给定对象也是一个集合,则返回true,这两个集合具有相同的大小,并且给定集合的每个成员都包含在此集合中。这可以确保equals方法在Set接口的不同实现中正常工作   此实现首先检查指定的对象是否为此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