2012-05-08 32 views
2

任何人都可以请澄清,当我们在集合上检查平等的equals()方法被调用传入对象或那些有在集合对象。对于前。 如果一个Set或一个HashMap有对象object1,object2和object3以及第四个对象叫做object4试图进入Set,或者在hashmap的情况下将它与已经存在的三个对象进行比较,那么在这第四个方法上调用equals()方法对象和已经存在的三个对象一个接一个地传递或者反向是真的。equals()方法被调用现有对象或传入对象在集合

+0

您能告诉我们一些代码,告诉我们您正在尝试做什么,以便我们可以更好地理解这一点吗? –

+1

为什么不看源代码而不是相信陌生人的话? – dty

+1

@dty:你为什么推荐?在这种情况下,从标准API查看类的源代码非常危险,因为您可能最终依赖于实现的特定细节。 – jarnbjo

回答

0

嗯......正如我刚才在eclipse检查,进入对象的equals()方法被调用。 Eclipse通过ref。在传入对象的equals()方法中一个接一个地存在的对象。 我知道你们大家都在说,它是用Sun的equals()方法合约写的,它等于方法应该是自反的,对称的和传递的。 当我在考虑如果主动检查了两个引用(即正在检查的相等)是否指向同一个对象,那么可以更好地优化集合。如果是的话,那么通过equals()和hashcode()方法是有意义的。

+0

请使用注释作进一步的解释,答案是回答这个问题,而不是解释你厌倦了什么。 – amod

+0

@amod:我试过了,很好地回答了我的问题。 – Ahmad

6

答案并不重要(实施时可能会有所不同),因为通过合同,A.equals(B)当且仅当B.equals(A)。不尊重这份合同是收藏中奇怪和不连贯行为的秘诀。

3

没有办法知道,除非你正在考虑一个非常具体的集合实现。你不应该依赖它。等号方法应该是自反的,即x.equals(y)应该给出与y.equals(x)相同的结果,除非其中一个为空。

2

有应a.equals(b)和b.equals(一)(如果A和B不为空)的平等应该是对称之间没有性差异。不能保证使用什么形式(a.equals(b)或b.equals(a))。