所以我正在學習Java,我試圖理解平等,但我真的不明白它。所以我的問題是:平等是如何工作的? 謝謝Java等於和hashmaps問題
回答
equals方法將比較值的相等性。
的equals方法是在Object類中定義,因此這意味着所有其他類都可以用這個方法來比較它是如何工作的:它首先會檢查它指的是其自身則對象的haschode的,如果這些如果是這樣,它會檢查該對象中的每個字段與您正在映射的對象的字段,爲什麼您可能會問co的haschode可能是相同的,但它仍然可以在字段中包含其他值,但賠率較低,但它需要深入比較。
equals
是您用來發現兩個給定對象是否相同的方法。對象的等於的默認實現是:如果它們具有完全相同的參考,則它們是相同的。
有時候,你不想要這個。假設你有一個ComplexNumber
類,以及兩個值爲1+i
的實例。你不希望他們只因爲他們是不同的實例而不平等。實質上,它們表示相同的數字。在這種情況下,您應該重寫equals以確保其行爲符合預期。
HashMaps使用來自equals的信息知道您傳遞的密鑰是否已經存在。
從有效的Java書:
當你 覆蓋equals
我還添加到始終覆蓋哈希碼:特別是如果你使用的是一個HashMap =)
散列表也使用hashcode()來更快地搜索關鍵字,並且hashcode()
的結果必須與一致210結果。換句話說,如果x.equals(y)
,那麼x.hashcode() == y.hashcode()
(或者你的hashmap可能有未定義的行爲)。你可能會有x和y x.hashcode() == y.hashcode()
和!x.equals(y)
如果你想要一個更具體的答案,請做出更具體的問題=)。
當覆蓋equals()時,請記住重寫hashcode()。這將同樣給你很多調試麻煩! –
另請參閱:http://stackoverflow.com/questions/27581/overriding-equals-and-hashcode-in-java – TwentyMiles
equals()
的意思是「有意義的等價物」。它與==
不一樣,意思是「這些是同一個對象。」所有的課程均採用equals()
方法,不受Object
課程的限制。例如,假設你寫一個Car
類賣場,型號和所有者:
Car carOne = new Car("Buick", "LeSabre", "John Doe");
Car carTwo = carOne;
這裏,equals()
和==
都將返回true,因爲這兩個引用指向同一輛車。但是,對於
Car carOne = new Car("Buick", "LeSabre", "John Doe");
Car carTwo = new Car("Buick", "LeSabre", "John Doe");
有兩個不同的對象,所以==
返回false。然而,由於這兩輛車都是由John Doe所擁有的別克LeSabres,因此您的equals()
應該寫爲true(假設這個例子中沒有人擁有多於一輛相同類型的汽車)。
此外,塞繆爾指出,如果重寫equals()
,你也應該重寫hashCode()
;其原因超出了這個問題的範圍,並在其他地方有詳細記錄。
- 1. Java HashMaps和putAll()方法的問題
- 2. 只有放置和獲取Java HashMaps - 可能併發性問題?
- 3. hashmaps問題獲取函數
- 4. java中的協會和hashmaps
- 5. 問題等於Java中的字符串
- 6. HashMap的關鍵和值等於兩個其他hashmaps使用Java的值
- 7. 使用HashMaps Java
- 8. Java - Maps&HashMaps
- 9. Java - Questin關於hashmaps的實現
- 10. C++等同於Java導入和其他問題
- 11. 推薦在Java中使用ArrayLists和HashMaps?
- 12. 的VBScript等於問題
- 13. 等於方法的問題
- 14. 問題與循環/等於==
- 15. ADO.RecordCount等於-1問題
- 16. 如何解決java.util.NoSuchElementException:對於HashMaps和ArrayLists?
- 17. R:+ =(加上等於)和++(加上)等價於C++/c#/ java等等?
- 18. Jackson JSON,REST數據綁定和HashMaps問題
- 19. Perl - 匿名hashmaps和數組 - 幾個問題
- 20. Android圖像緩存 - 硬和軟HashMaps問題
- 21. Foreach對HashMaps無效?和一般優先級隊列問題
- 22. java,覆蓋和等於
- 23. Java集合和等於與==
- 24. HashCode和Java中的等於
- 25. 關於集成java和flex的問題
- 26. Java - 關於JTextField和JPasswordField的問題
- 27. 關於Servlet和JSP的Java問題
- 28. 關於Random和Int的問題(Java)
- 29. 問題與Java面孔和h:selectOneMenu用於
- 30. Javascript範圍和hashmaps
也許你可以詳細說明這個問題,特別是,因爲它似乎圍繞標題中的hashmaps?你是什麼意思,它是如何工作的?在什麼情況下? – wsorenson