關於java中Object類中的equals()和hashCode()方法的使用個人總結


1 這兩個方法都是來自java.lang.Object類,在Object中hashCode()返回的是對象的地址值,equals()方法是對兩個對象的地址進行的比較;如果equals()方法的返回值相同,說明兩個對象的地址值也是相同的,所以hashCode()的返回值也是相同的。

2在向集合(如HashSet,TreeSet等)中添加元素的時候遵循的規則是:

   A 判斷對象的hashCode的值是否相同,如果不相同,認為這兩個元素不相同,如果相同,轉入B。

   B判斷兩個對象的equals運算的值是否相同,如果不相同,認為兩個對象是不相同的,

如果相同認為兩個對象是相同的。

3 在向封裝類的對象中添加元素的時候,由於封裝類已經重寫了hashCode()和equals()方法,

所以這里使用的是封裝類自己重寫的兩個方法。所以只要存入的內容相同就認為是相同的對象。

4 向集合中添加自定義類的對象時,如果自定義類沒有重寫equals()和hashCode()方法,就會調用Object的這兩個方法,也就是hashCode()方法產生一個hashCode值(永遠不會相同的地址),再使用equals()方法進行比較(地址);所以可能會產生向集合中添加已有的對象的時候,由於兩次產生的hashcode值是不同的,equals()方法認為這兩次添加的不是相同的元素,從而造成了集合對象中有重復的元素出現。解決的方法是:重寫自定義類的這兩個方法。

5 hashCode()方法經常和散列集合一起使用(HashSet,HashMap,HashTable),

如果集合中不允許有重復的元素,如果采用equals()進行比較的話,會產生效率問題。

所以使用hashCode()方法,在添加元素的時候就進行保證元素的唯一性。

6 如果一個類重寫了equals()方法,則一定也要重寫hashCode()方法,原因是:雖然equals()方法重寫可以保證正確判斷兩個對象在邏輯是否相同,但是hashCode()方法映射的物理地址是不相同的,依然會將邏輯上相同的兩個元素存入集合,但是第二個對象的內容會是Null.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM