課程
/后端開發(fā)
/Java
/Java入門第三季
hashCode表示的是對(duì)象的地址吧,那直接equals不就行了?
2015-08-27
源自:Java入門第三季 6-2
正在回答
詳細(xì)的可以去看HashMap的contains實(shí)現(xiàn),那里是equals和hashCode兩個(gè)同時(shí)使用了,所以在有Map的時(shí)候,必須兩個(gè)都要驗(yàn)證。HashSet也驗(yàn)證兩個(gè)。但是在ArrayList里不驗(yàn)證hashCode,所以你不重寫hashCode也無所謂。
equals和hashcode方法要同時(shí)重寫,并且要在equals為true的時(shí)候,hashCode必須要相同。這個(gè)已經(jīng)是一種不成文的規(guī)定了,這兩個(gè)方法要重寫就要一起重寫,而且IDE里也會(huì)將只重寫一個(gè)視為警告。所以這兩個(gè)方法要同時(shí)重寫。
equals 方法在非空對(duì)象引用上實(shí)現(xiàn)相等關(guān)系:
自反性:對(duì)于任何非空引用值 x,x.equals(x) 都應(yīng)返回 true。
對(duì)稱性:對(duì)于任何非空引用值 x 和 y,當(dāng)且僅當(dāng) y.equals(x) 返回 true 時(shí),x.equals(y) 才應(yīng)返回 true。
傳遞性:對(duì)于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 應(yīng)返回 true。
一致性:對(duì)于任何非空引用值 x 和 y,多次調(diào)用 x.equals(y) 始終返回 true 或始終返回 false,前提是對(duì)象上 equals 比較中所用的信息沒有被修改。
對(duì)于任何非空引用值 x,x.equals(null) 都應(yīng)返回 false。
Object 類的 equals 方法實(shí)現(xiàn)對(duì)象上差別可能性最大的相等關(guān)系;即,對(duì)于任何非空引用值 x 和 y,當(dāng)且僅當(dāng) x 和 y 引用同一個(gè)對(duì)象時(shí),此方法才返回 true(x == y 具有值 true)。
注意:當(dāng)此方法被重寫時(shí),通常有必要重寫 hashCode 方法,以維護(hù) hashCode 方法的常規(guī)協(xié)定,該協(xié)定聲明相等對(duì)象必須具有相等的哈希碼。
參數(shù):
obj - 要與之比較的引用對(duì)象。
返回:
如果此對(duì)象與 obj 參數(shù)相同,則返回 true;否則返回 false。
Set的子類是HashSet,具體什么原因不知道,不過通過子類初始化,就存在hash了不是嗎
因?yàn)長ist 那里沒有用到 hash 的方法,一般情況下我們重寫都會(huì)把兩個(gè)都重寫的。
qq電子時(shí)代
舉報(bào)
Java中你必須懂得常用技能,不容錯(cuò)過的精彩,快來加入吧
2 回答為什么不能重寫contains中的equals的方法
2 回答Set里面是如何運(yùn)用removeAll()方法的
2 回答equals里面的equals為啥work?
3 回答重寫equals后調(diào)用contains會(huì)自動(dòng)調(diào)用所重寫的equals?(contains的原理?)
2 回答set的contains方法
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2016-07-26
詳細(xì)的可以去看HashMap的contains實(shí)現(xiàn),那里是equals和hashCode兩個(gè)同時(shí)使用了,所以在有Map的時(shí)候,必須兩個(gè)都要驗(yàn)證。HashSet也驗(yàn)證兩個(gè)。但是在ArrayList里不驗(yàn)證hashCode,所以你不重寫hashCode也無所謂。
equals和hashcode方法要同時(shí)重寫,并且要在equals為true的時(shí)候,hashCode必須要相同。這個(gè)已經(jīng)是一種不成文的規(guī)定了,這兩個(gè)方法要重寫就要一起重寫,而且IDE里也會(huì)將只重寫一個(gè)視為警告。所以這兩個(gè)方法要同時(shí)重寫。
2016-05-11
equals 方法在非空對(duì)象引用上實(shí)現(xiàn)相等關(guān)系:
自反性:對(duì)于任何非空引用值 x,x.equals(x) 都應(yīng)返回 true。
對(duì)稱性:對(duì)于任何非空引用值 x 和 y,當(dāng)且僅當(dāng) y.equals(x) 返回 true 時(shí),x.equals(y) 才應(yīng)返回 true。
傳遞性:對(duì)于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 應(yīng)返回 true。
一致性:對(duì)于任何非空引用值 x 和 y,多次調(diào)用 x.equals(y) 始終返回 true 或始終返回 false,前提是對(duì)象上 equals 比較中所用的信息沒有被修改。
對(duì)于任何非空引用值 x,x.equals(null) 都應(yīng)返回 false。
Object 類的 equals 方法實(shí)現(xiàn)對(duì)象上差別可能性最大的相等關(guān)系;即,對(duì)于任何非空引用值 x 和 y,當(dāng)且僅當(dāng) x 和 y 引用同一個(gè)對(duì)象時(shí),此方法才返回 true(x == y 具有值 true)。
注意:當(dāng)此方法被重寫時(shí),通常有必要重寫 hashCode 方法,以維護(hù) hashCode 方法的常規(guī)協(xié)定,該協(xié)定聲明相等對(duì)象必須具有相等的哈希碼。
參數(shù):
obj - 要與之比較的引用對(duì)象。
返回:
如果此對(duì)象與 obj 參數(shù)相同,則返回 true;否則返回 false。
2016-04-11
Set的子類是HashSet,具體什么原因不知道,不過通過子類初始化,就存在hash了不是嗎
2015-11-04
因?yàn)長ist 那里沒有用到 hash 的方法,一般情況下我們重寫都會(huì)把兩個(gè)都重寫的。