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