我有两个Map对象:一个HashMap和一个LinkedHashMap。两者都包含相同的值(例如,[1, 2]),并且对于 LinkedHashMap,插入顺序被保留。但是,当我使用 equals() 方法比较这些映射的 value() 函数返回的集合时,比较返回 false。
我最初认为这可能是由于 HashMap 不保留插入顺序。但是当我对两个 LinkedHashMap 对象执行相同的比较时,插入顺序确实被保留,equals() 方法仍然返回 false。
有人可以解释为什么 equals() 方法在这两种情况下都返回 false,即使:
import java.util.LinkedHashMap;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
// HashMap example
Map<String, Integer> map1 = new HashMap<>();
map1.put("a", 1);
map1.put("b", 2);
Map<String, Integer> map2 = new HashMap<>();
map2.put("x", 1);
map2.put("y", 2);
System.out.println("map1 values: " + map1.values()); // prints [1, 2]
System.out.println("map2 values: " + map2.values()); // prints [1, 2]
System.out.println("map1.values().equals(map2.values()): " + map1.values().equals(map2.values())); // returns false
// LinkedHashMap example
Map<String, Integer> map1l = new LinkedHashMap<>();
map1l.put("a", 1);
map1l.put("b", 2);
Map<String, Integer> map2l = new LinkedHashMap<>();
map2l.put("x", 1);
map2l.put("y", 2);
System.out.println("map1l values: " + map1l.values()); // prints [1, 2]
System.out.println("map2l values: " + map2l.values()); // prints [1, 2]
System.out.println("map1l.values().equals(map2l.values()): " + map1l.values().equals(map2l.values())); // still returns false
}
}
因为map1和map2是不同的实例,他们有自己的地址。
价值观:
public Collection<V> values() {
Collection<V> vs = values;
if (vs == null) {
vs = new Values();
values = vs;
}
return vs;
}