当我们检查集合的相等性时,任何人都可以澄清一下,在传入对象或集合中的那些对象上调用 equals() 方法。例如。如果 Set 或 Hashmap 具有对象 object1、object2 和 object3,并且名为 object4 的第四个对象尝试进入 Set,或者在 hashmap 的情况下与已经存在的三个对象进行比较,则在第四个对象上调用 equals() 方法并且已经存在的三个对象一个一个地传递或反向是真的。?
问问题
192 次
4 回答
6
答案并不重要(并且可能在实现之间有所不同),因为根据合同,A.equals(B)
当且仅当B.equals(A)
. 不遵守这份合同是导致收藏品出现奇怪和不连贯行为的秘诀。
于 2012-05-08T12:39:42.063 回答
3
没有办法知道,除非您正在考虑一个非常具体的集合实现。你不应该依赖它。equals 方法应该是自反的,即x.equals(y)
应该给出与 相同的结果y.equals(x)
,除非其中之一为空。
于 2012-05-08T12:40:17.837 回答
2
a.equals(b) 和 b.equals(a) 之间应该没有区别(如果 a 和 b 不为 null )等于应该是对称的。无法保证使用什么形式(a.equals(b) 或 b.equals(a))。
于 2012-05-08T12:40:51.097 回答
0
好吧...正如我刚刚在eclipse中检查的那样,调用了传入对象的equals()方法。Eclipse 通过参考。传入对象的equals()方法中的预先存在的对象一一对应。我知道你们都在说,在 Sun 的 equals() 方法契约中,equals 方法应该是自反的、对称的和传递的。当我认为如果以某种方式主动检查两个引用(正在检查是否相等)是否指向同一个对象,则集合可能会更加优化时想到了这个问题。如果是,那么绕过 equals() 和 hashcode() 方法确实有意义。
于 2012-05-09T06:21:46.867 回答