2012-05-08 36 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))。