偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Java雜談——你真的會(huì)重寫Equals方法嗎

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

[[410872]]

 什么是equals方法

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

Object中的equals方法的源碼

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

為什么需要重寫equals方法

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

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

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

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

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

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

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

equals和hashCode

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

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

  • equals - 保證比較對(duì)象是否是絕對(duì)相等的
  • hashCode - 保證在最快的時(shí)間內(nèi)判斷兩個(gè)對(duì)象是否相等,可能有誤差值

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

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

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

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

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

2016-06-01 15:42:58

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

2023-03-01 09:39:05

2019-01-22 15:37:01

GitHub代碼開發(fā)者

2017-10-10 11:11:14

2018-09-29 15:34:34

JavaList接口

2018-11-20 09:37:19

Java內(nèi)存模型

2020-06-04 14:15:55

Java中BigDecimal函數(shù)

2023-11-01 13:48:00

反射java

2014-04-17 16:42:03

DevOps

2022-07-26 00:00:22

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

2020-04-17 14:25:22

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

2025-08-06 08:53:35

2024-04-23 08:31:57

pythonfalse

2021-01-15 07:44:21

SQL注入攻擊黑客

2021-11-09 09:48:13

Logging python模塊
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)