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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

hashcode問(wèn)題

什么時(shí)候要重寫(xiě)hashcode什么時(shí)候不要呢?

正在回答

2 回答

跟哈希表有關(guān)的集合基本都要重寫(xiě),如果不重寫(xiě)的話,調(diào)用的是Object的hashCode方法(返回的是堆中對(duì)象的地址,即棧中的引用變量存儲(chǔ)的值)。

舉個(gè)例子:

假設(shè)Student類(lèi)中有2個(gè)成員變量:年齡,姓名。

然后main方法定義一個(gè)HashSet集合用來(lái)存儲(chǔ)Stundent對(duì)象(假定我們查詢的時(shí)候利用名字不同來(lái)判斷對(duì)象不同)

然后有這樣3個(gè)對(duì)象(3個(gè)學(xué)生) ? ?{“小明”,19歲}。{“小紅”, 20歲}。{“小明”,7歲}。

當(dāng)把這3個(gè)對(duì)象依次放進(jìn)HashSet集合時(shí),HashSet集合將會(huì)先判斷hashCode值是否一樣,如果不重寫(xiě)HashCode方法,則返回的是這3個(gè)對(duì)象的地址,那么???{“小明”,19歲},{“小明”,7歲}都被加了集合中。姓名就重復(fù)了,這違反了Hash表的宗旨。Hash表要求每個(gè)元素的hashCode都需要不一樣的,所以這個(gè)時(shí)候就需要重寫(xiě)HashCode方法與equals方法,使得{“小明”,19歲}與{“小明”,7歲}的hashCode值一樣,equals方法返回true,這樣這2個(gè)小明就不會(huì)被添加進(jìn)去了。

記住就行:基本上跟哈希表有關(guān)的集合基本都要重寫(xiě)hashCode方法與equals()方法。比如HashSet,HashMap,LinkedHashSet......


3 回復(fù) 有任何疑惑可以回復(fù)我~
#1

紫_羽 提問(wèn)者

非常感謝!
2016-08-15 回復(fù) 有任何疑惑可以回復(fù)我~
#2

慕粉4279355

太感謝!這個(gè)例子終于把我的困惑解決了!
2016-11-13 回復(fù) 有任何疑惑可以回復(fù)我~
#3

Sean_Chou

很給力,讓我也想明白了這個(gè)問(wèn)題,感謝!
2017-11-19 回復(fù) 有任何疑惑可以回復(fù)我~

java?里有個(gè)超類(lèi),就是所有的類(lèi)都繼承至那個(gè)類(lèi),叫Object。這個(gè)知道不?這個(gè)類(lèi)有equals和hashCode方法,所以你要做一些你自定義的比較,你就要重寫(xiě)這些方法。

比如你知道Set這個(gè)集合是不能存相同內(nèi)容的嗎?它判斷相同內(nèi)容的依據(jù)就是存進(jìn)去的這個(gè)對(duì)象與set這個(gè)集合里面存在的各個(gè)對(duì)象的hashcode比較是否相同。如果相同,就存不進(jìn)去。

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

紫_羽 提問(wèn)者

除了set集合外還有那些集合要重寫(xiě)hashcode方法呢?可以列舉出來(lái)嗎?
2016-08-13 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
Java入門(mén)第三季
  • 參與學(xué)習(xí)       409764    人
  • 解答問(wèn)題       4543    個(gè)

Java中你必須懂得常用技能,不容錯(cuò)過(guò)的精彩,快來(lái)加入吧

進(jìn)入課程
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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