什么情況需要重寫equals? 如何重寫equals和hashCode


一、需要重寫的情況

       加入到HashSet中的自定義類對象,為確保他們不重復,需要對他們的類重寫equals() 和 hashcode()的方法。

       如果不重寫equals() 方法,相同的內容不同引用的對象會被當做不同的對象被加入到hashset中

      例如:自定義的類 User  參數值完全一致的情況下 

                 User user1 = new User("張三","上海");

                 User user2 = new User("張三","上海");

                 Set(User) set = new HashSet();

                 set.add(user1);

                 set.add(user2);

                 //不重寫equals() 和 hashcode()

                 set集合中存了兩個值  set.size()  == 2

                 //重寫

                 set集合中存了一個值  set.size()  == 1

                

        注意:1、重寫equals必須重寫hashCode方法  因為是先比較兩個對象的hash值是否相等在判斷值         

                   2、equals() 和 hashCode() 的定義必須兼容 如果 x.equals(y) 則x , y 的hashCode必須相等,

                   3、x , y 的 hashCode相等,x , y 不一定相等

二、重寫equals() 和  hashcode() 方法

       1、重寫equals()

       1)判斷比較對象 object 是否等於自身

             if(object == this) return true;

        2)判斷比較對象object是否是目標類型的對象 例如 User

             if(!(object instanceof  User)) return false;

        3)類型轉換成目標對象  比較 自定的字段 是否相等   全部字段都要進行比較

             User u = (User)object;

             return u.name.equals(name) && u.age == age;

         2、重寫hashCode

             public int hashCode(){

                 int result = 17;

                 result = result *31 + name.hashCode();

                 result = result*31 + age;

              return result;

           }


免責聲明!

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



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