我有一個自定義類,覆蓋equals()
和hashCode()
方法。我將該類的實例存儲在TreeSet
中。我不知道爲什麼tree.contains(someObject)
返回true
,而tree.first().equals(someObject)
返回false
,在tree
只有一個元素的情況下。Java包含()不符合equals()
0
A
回答
2
其實你應該實施Comparable
但你也應該覆蓋equals
。 兩者都是必需的。
此外,當equals
返回true時,您應該確保compareTo
方法總是返回0。如果equals
將返回false,那麼compareTo
也應返回值!= 0。
如果您想改爲使用HashMap
,則需要實施hashCode。所以,實施它也可能是一個好主意。
編輯:
對於那些誰不知道有關Comparator
:當你要使用不同種類的排序,不時的該接口使用。在這種情況下,您將創建一個充當分揀機的附加類。這個類然後需要實現Comparator
接口。所以在這種情況下,你不希望你的班級實施它。
1
按照Doc爲TreeSet:
Set接口是按照equals操作定義的,而是一個 TreeSet實例使用其的compareTo 執行所有元件比較(或比較)的方法,因此兩個元件從這個集合的觀點來看,這個方法被認爲是相等的。
如果您在沒有顯式比較器的情況下實例化TreeSet,它期望插入的元素實現Comparable
。看來你還沒有那樣做。
相關問題
- 1. Java中的字符串:.equals()
- 2. equals()和包含()看似矛盾
- 3. 字符串包含Java
- 4. 如果語句不是使用equals運行的字符串,但包含作品
- 5. 當字符串包含'{}'字符時不能組合字符串
- 6. Laravel集合不包含
- 7. LinkedHashSet:hashCode()和equals()方法的比賽,但包含()不
- 8. 合併在Java類似的包含HashMap
- 9. 合併包含HashMap保持值JAVA
- 10. Java,JTextField .equals
- 11. 在Java中.equals()
- 12. Java:.contains和.equals
- 13. .Net集合類在包含的成員上使用.Equals()來評估.Contains()?
- 14. 的Java看看ArrayList包含字符串
- 15. 包含空格的Java字符串
- 16. Laravel集合包含
- 17. Java overided equals方法
- 18. .isEqualTo vs .equals in java
- 19. ==和java中的.equals()
- 20. java的equals()方法
- 21. .NET Dictionary/IDictionary的Equals()合同vs等於()Java地圖的合同
- 22. 包含字符
- 23. ora的LPX-00607:包含在java中但不包含sqlplus
- 24. 使用 '==',而不是.equals爲Java字符串
- 25. NuGet包不符合netcoreapp2.0
- 26. 斷言集合不包含項目
- 27. Spring MVC:findById - 不包含所有ManyToOne集合
- 28. 包含java-問題
- 29. 的Java HashMap.containsKey()不調用equals()方法
- 30. 驗證字符串包含'aaa'但不包含'bbb'
你可以分享對象'equals'和'hashCode'嗎? – Mureinik
我同意@Mureinik。在這個問題被關閉或投票重大之前,發佈所有相關的代碼。 – CKing
您的自定義類是否實現了「Comparable」,或者您是否爲TreeSet指定了一個自定義的「比較器」? – isnot2bad