亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為何Set中的contains 方法運用的是hashCode+equals的模式 而List里面是equals的 模式?

hashCode表示的是對象的地址吧,那直接equals不就行了?

正在回答

4 回答

詳細的可以去看HashMap的contains實現,那里是equals和hashCode兩個同時使用了,所以在有Map的時候,必須兩個都要驗證。HashSet也驗證兩個。但是在ArrayList里不驗證hashCode,所以你不重寫hashCode也無所謂。

equals和hashcode方法要同時重寫,并且要在equals為true的時候,hashCode必須要相同。這個已經是一種不成文的規定了,這兩個方法要重寫就要一起重寫,而且IDE里也會將只重寫一個視為警告。所以這兩個方法要同時重寫。



0 回復 有任何疑惑可以回復我~

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。


0 回復 有任何疑惑可以回復我~

Set的子類是HashSet,具體什么原因不知道,不過通過子類初始化,就存在hash了不是嗎

0 回復 有任何疑惑可以回復我~

因為List 那里沒有用到 hash 的方法,一般情況下我們重寫都會把兩個都重寫的。

0 回復 有任何疑惑可以回復我~
#1

qq電子時代

List中對equals進行重寫,重寫以前是怎么執行的,重寫后又怎么執行的 能不能舉舉例子
2016-04-11 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為何Set中的contains 方法運用的是hashCode+equals的模式 而List里面是equals的 模式?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號