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