![](/img/trans.png)
[英]How HashMap retrieves different values if Key's hashcode is same but equals method return false
[英]HashMap values().equals() is always return false even if comparing with another HashMap which has same value
我正在尝试使用 hashMap.values().equals() 检查两个哈希图的值是否彼此相等。 但即使两个 HashMap 具有相同的值,它也不被视为相等。
String s = "egg";
String t = "add";
int count = 0;
HashMap<String,Integer> hashMap = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
String val = String.valueOf(s.charAt(i));
if (!hashMap.containsKey(val)) {
count++;
hashMap.put(val, count);
} else {
hashMap.put(val, hashMap.get(val));
}
}
HashMap<String,Integer> hashMap2 = new HashMap<>();
int count2 = 0;
for (int j = 0; j < t.length(); j++) {
String val = String.valueOf(t.charAt(j));
if (!hashMap2.containsKey(val)) {
count2++;
hashMap2.put(val, count2);
} else{
hashMap2.put(val, hashMap2.get(val));
}
}
if (hashMap.values().equals(hashMap2.values())) {
return true;
} else {
return false;
}
您正在比较两个集合,它们永远不会相等,因为您正在对两个不同的集合进行引用比较。 Apache commons-collections 有 CollectionUtils#isEqualCollection,使用它。 当然,如果您要创建自己的类作为映射的值,请在其中实现 equals 和 hashCode。
由于hashMap.values()
是 return Collection<T>
我们不能将它与equals()
进行比较。 感谢 Ali Ben Zarrouk 的帮助。 这是如何在不使用任何第三方库的情况下检查两个 hashmap 的值是否相等的实现。
if(areHashMapValuesEqual(hashMap.values(),hashMap2.values())){
return true;
} else {
return false;
}
static <T> boolean areHashMapValuesEqual(Collection<T> lhs, Collection<T> rhs) {
boolean equals = false;
if(lhs!=null && rhs!=null) {
equals = lhs.size( ) == rhs.size( ) && lhs.containsAll(rhs) && rhs.containsAll(lhs);
} else if (lhs==null && rhs==null) {
equals = true;
}
return equals;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.