java的hashmap

刷題的時(shí)候,用了java的hashset粉洼,泛型里面用了int[], 但是總是remove不成功,debug了下發(fā)現(xiàn)hash不成功茵瘾,查了下源代碼,貌似泛型里面只能用object栖秕。剛開始以為可能hash的是object的地址弧岳,但是想起來(lái)唬涧,如果是gc了轉(zhuǎn)移新生代老生代的話譬正,那么hash不就沒(méi)用了么宫补。決定去深扒下代碼。

set采用的和hashmap一樣的方法曾我,hashmap的源代碼是這樣的:

static final int hash(Object key) {

????int h;

? ? return (key ==null) ?0 : (h = key.hashCode()) ^ (h >>>16);

}

理論上如果直接用32位的int值粉怕,從-2147483648到2147483648,40多億的數(shù)組抒巢,如果不是跑大數(shù)據(jù)的話斋荞,應(yīng)該平時(shí)也就夠了。但內(nèi)存不夠虐秦,如果只取后幾位的話,概率分布不好的話凤优,很可能出現(xiàn)一個(gè)桶已經(jīng)滿了悦陋,剩下的空著的情況,因此java采取了高半?yún)^(qū)和低半?yún)^(qū)做異或筑辨。那么h又是怎么來(lái)的呢俺驶,hashcode是如何實(shí)現(xiàn)的?

繼續(xù)扒代碼棍辕,發(fā)現(xiàn)是native暮现,放棄,下載openjdk開扒楚昭。

這是c里面的:

JVM_ENTRY(jint, JVM_IHashCode(JNIEnv* env, jobject handle))

? JVMWrapper("JVM_IHashCode");

? // as implemented in the classic virtual machine; return 0 if object is NULL

? returnhandle ==NULL?0: ObjectSynchronizer::FastHashCode (THREAD, JNIHandles::resolve_non_null(handle)) ;

JVM_END

FastHashCode一百多行就不貼了

看了半天栖袋,發(fā)現(xiàn),hashcode并不是基于地址做的hash抚太,至少openjdk8不是塘幅,而是基于thread state,只hash一次尿贫,緩存存到object header的mark word里面电媳,還有什么biasblock沒(méi)看懂==

google一番,搜到了別人寫的才明白:

https://srvaroa.github.io/jvm/java/openjdk/biased-locking/2017/01/30/hashCode.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庆亡,一起剝皮案震驚了整個(gè)濱河市匾乓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌又谋,老刑警劉巖拼缝,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娱局,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡珍促,警方通過(guò)查閱死者的電腦和手機(jī)铃辖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)猪叙,“玉大人娇斩,你說(shuō)我怎么就攤上這事⊙妫” “怎么了犬第?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)芒帕。 經(jīng)常有香客問(wèn)我歉嗓,道長(zhǎng),這世上最難降的妖魔是什么背蟆? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任鉴分,我火速辦了婚禮,結(jié)果婚禮上带膀,老公的妹妹穿的比我還像新娘志珍。我一直安慰自己,他們只是感情好垛叨,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布伦糯。 她就那樣靜靜地躺著,像睡著了一般嗽元。 火紅的嫁衣襯著肌膚如雪敛纲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天剂癌,我揣著相機(jī)與錄音淤翔,去河邊找鬼。 笑死珍手,一個(gè)胖子當(dāng)著我的面吹牛办铡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播琳要,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼寡具,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了稚补?” 一聲冷哼從身側(cè)響起童叠,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后厦坛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體五垮,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年杜秸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了放仗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡撬碟,死狀恐怖诞挨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呢蛤,我是刑警寧澤惶傻,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站其障,受9級(jí)特大地震影響银室,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜励翼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一蜈敢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧汽抚,春花似錦扶认、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)狱从。三九已至膨蛮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間季研,已是汗流浹背敞葛。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留与涡,地道東北人惹谐。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像驼卖,于是被迫代替她去往敵國(guó)和親氨肌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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

  • HashMap 和 HashSet 是 Java Collection Framework 的兩個(gè)重要成員酌畜,其中 ...
    Android看海閱讀 258評(píng)論 0 0
  • 1.HashMap是一個(gè)數(shù)組+鏈表/紅黑樹的結(jié)構(gòu)怎囚,數(shù)組的下標(biāo)在HashMap中稱為Bucket值,每個(gè)數(shù)組項(xiàng)對(duì)應(yīng)的...
    誰(shuí)在烽煙彼岸閱讀 1,028評(píng)論 2 2
  • 數(shù)據(jù)結(jié)構(gòu) JDK7中的HashMap采用數(shù)組+鏈表的結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù) JDK8中的HashMap采用數(shù)組+鏈表或樹的...
    w黃楊w閱讀 344評(píng)論 0 0
  • 每個(gè)父母都希望子女成龍成鳳桥胞,又希望子女一直在自己的身邊恳守。每一步自己都認(rèn)同考婴,社會(huì)是不一樣的。時(shí)代也不一樣了催烘,就不能去...
    靜靜的等待著閱讀 157評(píng)論 0 0
  • 看過(guò)那么多眼妝教程卻總是畫不好自己的眼妝沥阱,其實(shí)很大原因是踩到了很多眼妝雷區(qū)哦∫寥海科圖爾小編你建議其實(shí)可以從眼影刷具選...
    Rekkles19閱讀 127評(píng)論 0 0