gpt4 book ai didi

java - 为什么 AbstractCollection 没有实现 equals()?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:17:00 24 4
gpt4 key购买 nike

你知道吗:

Map<Object,Object> m1 = new HashMap<Object, Object>();
Map<Object,Object> m2 = new HashMap<Object, Object>();
System.out.println("m1.equals(m2) = "+m1.equals(m2));
System.out.println("m1.keySet().equals(m2.keySet()) = "
+m1.keySet().equals(m2.keySet()));
System.out.println("m1.entrySet().equals(m2.entrySet()) = "
+m1.entrySet().equals(m2.entrySet()));
System.out.println("m1.values().equals(m2.values()) = "
+m1.values().equals(m2.values()));

会输出:

m1.equals(m2) = true
m1.keySet().equals(m2.keySet()) = true
m1.entrySet().equals(m2.entrySet()) = true
m1.values().equals(m2.values()) = false

这是因为 AbstractCollection(HashMap$Values 继承自)没有覆盖 #equals()

你知道为什么会这样吗?

最佳答案

根据 Collection#equals() 的契约(Contract), Collection 没有通用的 equals() 方法,因此 AbstractCollection 无法提供。

请注意,HashMap$Values 既不是 Set 也不是 List,因此是一个难题,从某种意义上说,这也是它不支持 equals() 的原因。

关于java - 为什么 AbstractCollection 没有实现 equals()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/341377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com