第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java中hashCode和equals方法之間的關(guān)系

Java中hashCode和equals方法之間的關(guān)系

牧羊人nacy 2019-09-20 15:01:12
我在很多地方讀過,雖然equals在Java中覆蓋hashCode方法,也應(yīng)該覆蓋方法,否則就是“違反合同”。但到目前為止,如果我只覆蓋equals方法,而不是hashCode方法,我沒有遇到任何問題。合同是什么?當(dāng)我違反合同時,為什么我沒有遇到任何問題?如果我沒有覆蓋hashCode方法,在哪種情況下我會遇到問題?
查看完整描述

3 回答

?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗 獲得超7個贊

你的問題是與地方元素的單一性根據(jù)雙方計算的集合.equals()和.hashCode(),在一個實例鍵HashMap。


顧名思義,它依賴于哈希表,而哈希桶是對象的函數(shù).hashCode()。


如果你有兩個對象.equals(),但是有不同的哈希碼,你就輸了!


這里合同的重要部分是:必須具有相同的對象.equals().hashCode()。


這些都記錄在javadoc中Object。和約書亞·布洛克說,你必須這樣做在有效的Java。說夠了。


查看完整回答
反對 回復(fù) 2019-09-20
?
Smart貓小萌

TA貢獻(xiàn)1911條經(jīng)驗 獲得超7個贊

根據(jù)文檔,hashCode的默認(rèn)實現(xiàn)將返回一些對于每個對象不同的整數(shù)


盡可能合理,Object類定義的hashCode方法確實為不同的對象返回不同的整數(shù)。(這通常通過將對象的內(nèi)部地址轉(zhuǎn)換為整數(shù)來實現(xiàn),但

JavaTM編程語言不需要此實現(xiàn)技術(shù)。)


但是,有時您希望哈希碼對于具有相同含義的不同對象是相同的。例如


Student s1 = new Student("John", 18);

Student s2 = new Student("John", 18);

s1.hashCode() != s2.hashCode(); // With the default implementation of hashCode

如果在集合框架中使用散列數(shù)據(jù)結(jié)構(gòu)(如HashTable,HashSet),則會出現(xiàn)此類問題。特別是對于像HashSet這樣的集合,你最終會有重復(fù)元素并違反Set契約。


查看完整回答
反對 回復(fù) 2019-09-20
?
慕妹3146593

TA貢獻(xiàn)1820條經(jīng)驗 獲得超9個贊

是的,它應(yīng)該被覆蓋。如果您認(rèn)為需要覆蓋equals(),則需要覆蓋hashCode(),反之亦然。hashCode()的一般契約是:


每當(dāng)在執(zhí)行Java應(yīng)用程序期間多次在同一對象上調(diào)用它時,hashCode方法必須始終返回相同的整數(shù),前提是不修改對象的equals比較中使用的信息。從應(yīng)用程序的一次執(zhí)行到同一應(yīng)用程序的另一次執(zhí)行,該整數(shù)不需要保持一致。


如果兩個對象根據(jù)equals(Object)方法相等,則對兩個對象中的每一個調(diào)用hashCode方法必須生成相同的整數(shù)結(jié)果。


如果兩個對象根據(jù)equals(java.lang.Object)方法不相等,則不需要在兩個對象中的每一個上調(diào)用hashCode方法必須生成不同的整數(shù)結(jié)果。但是,程序員應(yīng)該知道為不等對象生成不同的整數(shù)結(jié)果可能會提高哈希表的性能。


查看完整回答
反對 回復(fù) 2019-09-20
  • 3 回答
  • 0 關(guān)注
  • 421 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號