任何人都可以澄清当我们检查集合上的相等性时,在传入对象或集合中的那些对象上调用equals()方法。对于前 如果Set或Hashmap具有对象object1,object2和object3以及第四个名为object4的对象尝试进入Set,或者在hashmap的情况下将其与现有的三个对象进行比较,则在第四个对象上调用equals()方法并且已经存在的三个对象是逐个传递的,或者反向是真的。?
答案 0 :(得分:6)
答案并不重要(并且可能因实施而异),因为合同A.equals(B)
当且仅当B.equals(A)
时。不尊重这份合同是收集品中奇怪和不连贯行为的一种方法。
答案 1 :(得分:3)
除非您正在考虑非常具体的集合实现,否则无法知道。你不应该依赖它。 equals方法应该是自反的,即x.equals(y)
应该给出与y.equals(x)
相同的结果,除非其中一个为空。
答案 2 :(得分:2)
a.equals(b)和b.equals(a)之间应该没有区别(如果a和b不为null)等于应该是对称的。我们无法保证使用什么形式(a.equals(b)或b.equals(a))。
答案 3 :(得分:0)
嗯......我刚刚在eclipse中检查过,调用了传入对象的equals()方法。 Eclipse传递ref。传入对象的equals()方法中的预先存在的对象是逐个的。 我知道你们都在说,它是用Sun的equals()方法合同写的,等于方法应该是反身的,对称的和传递的。 当我认为如果以某种方式主动检查两个引用(正在检查相等性)指向同一个对象时,我认为集合可以更加优化时会记住这个问题。如果它们是,则通过equals()和hashcode()方法确实有意义。