即使值和插入顺序相同,使用 equals 函数比较映射值也会返回 false

问题描述 投票:0回答:1

我有两个Map对象:一个HashMap和一个LinkedHashMap。两者都包含相同的值(例如,[1, 2]),并且对于 LinkedHashMap,插入顺序被保留。但是,当我使用 equals() 方法比较这些映射的 value() 函数返回的集合时,比较返回 false。

我最初认为这可能是由于 HashMap 不保留插入顺序。但是当我对两个 LinkedHashMap 对象执行相同的比较时,插入顺序确实被保留,equals() 方法仍然返回 false。

有人可以解释为什么 equals() 方法在这两种情况下都返回 false,即使:

  • 值的内容相同 ([1, 2]),
  • LinkedHashMap 中值的顺序会被保留吗?
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
    }
}


java interface hashmap linkedhashmap
1个回答
0
投票

因为map1和map2是不同的实例,他们有自己的地址。

价值观:

   public Collection<V> values() {
        Collection<V> vs = values;
        if (vs == null) {
            vs = new Values();
            values = vs;
        }
        return vs;
    }
新实例,两个实例不相等

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.