自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java雜談——你真的會重寫Equals方法嗎

開發(fā) 后端
在hashMap里面的put方法中,先根據(jù)hashcode找到對應下標。如果該下標對應的列表已經存在數(shù)據(jù),則對列表進行逐個遍歷,遍歷的時候使用equals判斷是否是相同對象。如果找到相同對象則進行更新操作,找不到則進行插入操作。

[[410872]]

 什么是equals方法

Java中用equals方法來判斷兩個對象是不是相等,equals方法是Object類就擁有的方法,因此所有類都擁有該方法,使用方式很簡單:a.equals(b) ,返回true或false。

Object中的equals方法的源碼

  1. public boolean equals(Object obj) { 
  2.     return (this == obj); 

為什么需要重寫equals方法

從object處的繼承來了equals僅僅判斷了2個對象的內存地址是否一樣,這樣的代碼,沒辦法滿足大部分的情況,因此新建的類如果需要使用equals方法就需要重寫equals方法。

重寫equals方法需要遵守的規(guī)范

1、自反性:對于任何非空引用x,x.equals(x)應該返回true。

2、對稱性:對于任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也應該返回true。

3、傳遞性:對于任何引用x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也應該返回true。

4、一致性:如果x和y引用的對象沒有發(fā)生變化,那么反復調用x.equals(y)應該返回同樣的結果。

5、非空性:對于任意非空引用x,x.equals(null)應該返回false。

equals和hashCode

每個覆蓋了equals方法的類中,必須覆蓋hashCode。如果不這么做,就違背了hashCode的通用約定。

equals和hashCode都是用來判斷兩個對象是否相等,區(qū)別是:

  • equals - 保證比較對象是否是絕對相等的
  • hashCode - 保證在最快的時間內判斷兩個對象是否相等,可能有誤差值

在hashMap里面的put方法中,先根據(jù)hashcode找到對應下標。如果該下標對應的列表已經存在數(shù)據(jù),則對列表進行逐個遍歷,遍歷的時候使用equals判斷是否是相同對象。如果找到相同對象則進行更新操作,找不到則進行插入操作。

假設現(xiàn)在存在2個equals為true,但是hashCode不一樣的key往同一個hashMap里面添加,因為hashCode不一樣,導致他們計算出來的下標大概率是不一樣的(不一樣的概率大于93%)。我們繼續(xù)假設他們的下標計算出來不一樣,那么當?shù)诙€key存入的時候,因為檢測的是另外一個列表,就無法發(fā)現(xiàn)第一個key的存在,因此會執(zhí)行插入操作。

這樣引發(fā)的問題就是在同一個hashMap中,同一個key(equals一樣),但是存在兩條數(shù)據(jù)。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-03-25 09:39:50

LinuxLinux top

2021-03-18 23:38:26

EqualsHashcode方法

2021-07-30 09:32:55

JavaEquals

2021-12-09 17:21:48

TypeScript TS 前端

2017-11-13 14:06:56

2019-01-22 15:37:01

GitHub代碼開發(fā)者

2023-03-01 09:39:05

2016-06-01 15:42:58

Hadoop數(shù)據(jù)管理分布式

2020-04-17 14:25:22

Kubernetes應用程序軟件開發(fā)

2022-07-26 00:00:22

HTAP系統(tǒng)數(shù)據(jù)庫

2014-04-17 16:42:03

DevOps

2017-10-10 11:11:14

2024-04-23 08:31:57

pythonfalse

2023-11-01 13:48:00

反射java

2018-09-29 15:34:34

JavaList接口

2018-11-20 09:37:19

Java內存模型

2020-06-04 14:15:55

Java中BigDecimal函數(shù)

2019-08-16 10:10:07

hashcodeequalsJava

2023-05-10 11:07:18

2012-04-24 09:54:14

WiFi
點贊
收藏

51CTO技術棧公眾號