我有一张地图(名为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
。
比较有什么问题?
答案 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