【发布时间】:2019-04-08 12:24:18
【问题描述】:
我正在尝试使用 hashMap.values().equals() 检查两个 hashmap 的值是否相等。但即使两个 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;
}
【问题讨论】:
-
你想做什么?
-
例如,我在两个哈希图中都有 [1, 2]。我在 if 语句之前检查。相同,但 if 语句总是返回 false。
-
hashMap.values()不等于hashMap2.values(),因为第一个是 [2,1,3],第二个是 [1,2,3]。 values 集合中的顺序由键的顺序决定,对于HashMap,它几乎是不可预测的。 -
@KlitosKyriacou 我被添加了错误的值。 s = "egg" 和 t = "add" 具有相同的值,但通过 .values().equals() 检查是不正确的,因为集合不能像 Ali Ben Zarrouk 指出的那样相等。感谢您的帮助。