起初我有这样的事情:
public static boolean equals(TreeMap<?, Boolean> a, TreeMap<?, Boolean> b) {
boolean isEqual = false;
int count = 0;
if (a.size() == b.size()) {
for (boolean value1 : a.values()) {
for (boolean value2 : b.values()) {
if (value2 == value1) {
count++;
isEqual = true;
continue;
} else {
isEqual = false;
return isEqual;
}
}
}
if (count == a.size()) {
return true;
}
}
}
然后发现nope它不起作用。我正在检查Object a中的每个元素是否与Object b中的相同,而不使用Iterate或Collection。并在同一个地方...任何建议?是否可以在keySet()上实现for-each循环?
那么,沿着这些方向呢?需要考虑 BOTH 键和值:(不是答案 - 建议的测试代码)
答案 0 :(得分:4)
当values()
备份TreeMap
时,这应该有效,因此会根据键值进行排序。
List<Boolean> aList = new ArrayList<>(a.values());
List<Boolean> bList = new ArrayList<>(b.values());
boolean equal = aList.equals(bList);
这应该比HashSet
版本快一点。
这不会起作用,因为@AdrianPronk注意到了:
a.values().equals(b.values())
答案 1 :(得分:3)
这个怎么样:
Set values1 = new HashSet(map1.values()); Set values2 = new HashSet(map2.values()); boolean equal = values1.equals(value2);
答案 2 :(得分:1)
对于在java中比较两个地图对象,您可以将地图的键添加到列表中,使用这两个列表,您可以使用方法retainAll()和removeAll()并将它们添加到另一个公共键列表和不同的键列表。
比较地图的正确方法是: