在集合中的现有对象或传入对象上调用Equals()方法

时间:2012-05-08 12:29:40

标签: java collections hashmap set

任何人都可以澄清当我们检查集合上的相等性时,在传入对象或集合中的那些对象上调用equals()方法。对于前 如果Set或Hashmap具有对象object1,object2和object3以及第四个名为object4的对象尝试进入Set,或者在hashmap的情况下将其与现有的三个对象进行比较,则在第四个对象上调用equals()方法并且已经存在的三个对象是逐个传递的,或者反向是真的。?

4 个答案:

答案 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()方法确实有意义。