關(guān)于hashcode方法

一、官方定義

hashCode 的常規(guī)協(xié)定是:

  • 在Java 應(yīng)用程序執(zhí)行期間,在同一對(duì)象上多次調(diào)用 hashCode 方法時(shí),必須一致地返回相同的整數(shù),前提是對(duì)象上 equals 比較中所用的信息沒有被修改排嫌。從某一應(yīng)用程序的一次執(zhí)行到同一應(yīng)用程序的另一次執(zhí)行,該整數(shù)無需保持一致缰犁。

  • 如果根據(jù) equals(Object) 方法淳地,兩個(gè)對(duì)象是相等的怖糊,那么在兩個(gè)對(duì)象中的每個(gè)對(duì)象上調(diào)用 hashCode 方法都必須生成相同的整數(shù)結(jié)果。

  • 以下情況不是必需的:如果根據(jù) equals(java.lang.Object) 方法颇象,兩個(gè)對(duì)象不相等伍伤,那么在兩個(gè)對(duì)象中的任一對(duì)象上調(diào)用 hashCode 方法必定會(huì)生成不同的整數(shù)結(jié)果。但是遣钳,程序員應(yīng)該知道扰魂,為不相等的對(duì)象生成不同整數(shù)結(jié)果可以提高哈希表的性能。

  • 實(shí)際上蕴茴,由 Object 類定義的 hashCode 方法確實(shí)會(huì)針對(duì)不同的對(duì)象返回不同的整數(shù)劝评。(這一般是通過將該對(duì)象的內(nèi)部地址轉(zhuǎn)換成一個(gè)整數(shù)來實(shí)現(xiàn)的,但是 JavaTM 編程語言不需要這種實(shí)現(xiàn)技巧倦淀。)

  • 當(dāng)equals方法被重寫時(shí)付翁,通常有必要重寫 hashCode 方法,以維護(hù) hashCode 方法的常規(guī)協(xié)定晃听,該協(xié)定聲明相等對(duì)象必須具有相等的哈希碼。

二砰识、個(gè)人理解hashcode

1.Object類的hashCode:返回對(duì)象的內(nèi)存地址經(jīng)過處理后的結(jié)構(gòu)能扒,由于每個(gè)對(duì)象的內(nèi)存地址都不一樣,所以哈希碼也不一樣辫狼。兩個(gè)對(duì)象要完全相同必須哈希值一樣初斑。比較用equal()方法

  • 任何類均為Object類的間接子類,所以均繼承方法public int hashCode()膨处,該方法返回的值一般是通過將該對(duì)象的內(nèi)部地址轉(zhuǎn)換成一個(gè)整數(shù)來實(shí)現(xiàn)的见秤。這樣能保證每個(gè)對(duì)象的哈希碼值不一樣

  • 這里的地址是指JVM虛擬出來的內(nèi)存地址,不是實(shí)際物理內(nèi)存地址真椿。

  • 哈希值和地址值是不一樣的鹃答,哈希值是通過哈希算法散列得來的,而地址值和物理層面有關(guān)突硝,是系統(tǒng)分配的测摔,是不存在相同的,而哈希值是可以通過強(qiáng)制手段設(shè)置為相同的解恰,也就是說哈希值是一種邏輯上的確保唯一性锋八,而地址值就是物理上確保唯一性。

三护盈、對(duì)象放入散列集合的流程圖

四挟纱、總結(jié)

1.hashCode是為了提高在散列結(jié)構(gòu)存儲(chǔ)中查找的效率,在線性表中沒有作用腐宋。
2.equals和hashCode需要同時(shí)覆蓋紊服。
3.若兩個(gè)對(duì)象equals返回true檀轨,則hashCode有必要也返回相同的int數(shù)。
4.若兩個(gè)對(duì)象equals返回false围苫,則hashCode不一定返回不同的int數(shù),但為不相等的對(duì)象生成不同hashCode值可以提高 哈希表的性能裤园。
5.若兩個(gè)對(duì)象hashCode返回相同int數(shù),則equals不一定返回true剂府。
6.若兩個(gè)對(duì)象hashCode返回不同int數(shù)拧揽,則equals一定返回false。
7.同一對(duì)象在執(zhí)行期間若已經(jīng)存儲(chǔ)在集合中腺占,則不能修改影響hashCode值的相關(guān)信息淤袜,否則會(huì)導(dǎo)致內(nèi)存泄露問題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末衰伯,一起剝皮案震驚了整個(gè)濱河市铡羡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌意鲸,老刑警劉巖烦周,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異怎顾,居然都是意外死亡读慎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門槐雾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來夭委,“玉大人,你說我怎么就攤上這事募强≈昃模” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵擎值,是天一觀的道長(zhǎng)慌烧。 經(jīng)常有香客問我,道長(zhǎng)鸠儿,這世上最難降的妖魔是什么杏死? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮捆交,結(jié)果婚禮上淑翼,老公的妹妹穿的比我還像新娘。我一直安慰自己品追,他們只是感情好玄括,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肉瓦,像睡著了一般遭京。 火紅的嫁衣襯著肌膚如雪胃惜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天哪雕,我揣著相機(jī)與錄音船殉,去河邊找鬼。 笑死斯嚎,一個(gè)胖子當(dāng)著我的面吹牛利虫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播堡僻,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼糠惫,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了钉疫?” 一聲冷哼從身側(cè)響起硼讽,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎牲阁,沒想到半個(gè)月后固阁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡城菊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年备燃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片役电。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖棉胀,靈堂內(nèi)的尸體忽然破棺而出法瑟,到底是詐尸還是另有隱情,我是刑警寧澤唁奢,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布霎挟,位于F島的核電站,受9級(jí)特大地震影響麻掸,放射性物質(zhì)發(fā)生泄漏酥夭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一脊奋、第九天 我趴在偏房一處隱蔽的房頂上張望熬北。 院中可真熱鬧诚隙,春花似錦讶隐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽效五。三九已至,卻和暖如春炉峰,著一層夾襖步出監(jiān)牢的瞬間畏妖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工疼阔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戒劫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓竿开,卻偏偏與公主長(zhǎng)得像谱仪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子否彩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容