理解重寫equals一定要重寫hashcode

2021-09-26 07:31:09 字數 1198 閱讀 7015

//重寫

@override

public boolean equals(object o)

if (o == null || this.getclass() != o.getclass())

user user = (user) o;

return objects.equals(id, user.id) &&

objects.equals(username, user.username) &&

objects.equals(age, user.age);

}@override

public int hashcode()

假設有兩個物件:

user user = new user();

user.setid(1);

user user1 = new user();

user1.setid(1);

重寫了equals和hashcode

system.out.println(user.equals(user1));//true

system.out.println(user.hashcode() == user1.hashcode());//true

反之只重寫equals:

//true

//false

也就是說 hashcode相當於我們的身份證號,兩個物件相等,hashcode一定相等;hashcode不等,兩個物件一定不等。

現在,再加一行** user1=user;

//true

//true

說明hashcode代表了指標/記憶體位址。

最後,提出關鍵性的疑問,什麼時候我會用到hashcode呢,hashcode不相等關我什麼事呢,我只用到equals判斷滿足我的要求了不就行了?

試試map.put(user,***);//  map key唯一性

mapmap = new hashmap<>();

map.put(user,1);

map.put(user1,2);

system.out.println(map);

重寫hashcode輸出:

=2}不重寫hashcode輸出:

=2, user=1}

為什麼重寫equals一定要重寫hashcode?

link1,link2,link3,link4,link5,link6 主要是為了提公升雜湊表的效能。因為hashmap 集合類使用了 hashcode 方法來計算物件在雜湊表中應該儲存的位置,如果不重寫hashcode值一樣的物件。因為new出來的物件即使值相同,儲存位址必不相同。不重寫 hash...

IDEA 重寫equals重寫toString

重寫equals方法 idea中直接輸入eq回車進入重寫方法 第二步如果obj這個物件連學生 student 這個型別都不是,那麼肯定返回false if obj instanceof student 第三步如果是學生型別,強制把obj轉換成學生物件,不轉換預設是objeke student s s...

重寫equals方法

對於重寫equals方法有以下例子 object類中的常用方法。object類是所有類的根類,定義了所有物件都具備的功能。api 應用程式介面 文件 class person extends object 判斷是否是同齡人。這個方法也是在比較兩個person物件是否相等。注意 person類中是否有...