HashMap

HashMap

HashMap基于哈希表的 Map 接口的實(shí)現(xiàn)卑笨。允許使用 null 值和 null 鍵。不保證映射的順序翁涤,特別是它不保證該順序恒久不變盗迟。HashMap不是線程安全的,可以通過(guò)Collections類的靜態(tài)方法synchronizedMap獲得線程安全的HashMap灸撰。

HashMap的底層主要是基于數(shù)組和鏈表來(lái)實(shí)現(xiàn)的。HashMap中主要是通過(guò)key的hashCode來(lái)計(jì)算hash值的拼坎,只要hashCode相同浮毯,計(jì)算出來(lái)的hash值就一樣。如果存儲(chǔ)的對(duì)象對(duì)多了泰鸡,就有可能不同的對(duì)象所算出來(lái)的hash值是相同的债蓝,這就出現(xiàn)了所謂的hash沖突。解決hash沖突的方法有很多盛龄,HashMap底層是通過(guò)鏈表來(lái)解決hash沖突的饰迹。

圖中芳誓,紫色部分即代表哈希表,也稱為哈希數(shù)組啊鸭,數(shù)組的每個(gè)元素都是一個(gè)單鏈表的頭節(jié)點(diǎn)锹淌,鏈表是用來(lái)解決沖突的,如果不同的key映射到了數(shù)組的同一位置處莉掂,就將其放入單鏈表中。

HashMap其實(shí)就是一個(gè)Entry數(shù)組千扔,Entry對(duì)象中包含了鍵和值憎妙,其中next也是一個(gè)Entry對(duì)象,它就是用來(lái)處理hash沖突的曲楚,形成一個(gè)鏈表厘唾。

/** Entry是單向鏈表。    
     * 它是 “HashMap鏈?zhǔn)酱鎯?chǔ)法”對(duì)應(yīng)的鏈表龙誊。    
     *它實(shí)現(xiàn)了Map.Entry 接口抚垃,即實(shí)現(xiàn)getKey(), getValue(), setValue(V value), equals(Object o), hashCode()這些函數(shù)  
    **/  
 static class Entry<K,V> implements Map.Entry<K,V> {  
        final K key;    
        V value;    
        // 指向下一個(gè)節(jié)點(diǎn)    
        Entry<K,V> next;    
        final int hash; 
        
        // 構(gòu)造函數(shù)。    
        // 輸入?yún)?shù)包括"哈希值(h)", "鍵(k)", "值(v)", "下一節(jié)點(diǎn)(n)"    
        Entry(int h, K k, V v, Entry<K,V> n) {    
            value = v;    
            next = n;    
            key = k;    
            hash = h;    
        } 

        //......
}

HashMap類的關(guān)鍵屬性

1 transient Entry[] table;//存儲(chǔ)元素的實(shí)體數(shù)組    默認(rèn)初始長(zhǎng)度為 16
2  
3 transient int size;//存放元素的個(gè)數(shù)
4  
5 int threshold; //臨界值   當(dāng)實(shí)際大小超過(guò)臨界值時(shí)趟大,會(huì)進(jìn)行擴(kuò)容threshold = 加載因子*容量
6 
7  final float loadFactor; //加載因子  默認(rèn)0.75
8  
9 transient int modCount;//被修改的次數(shù)

注意:

1鹤树、HashMap中通過(guò)hash&(length-1)的方法來(lái)代替取模(Hashtable中)來(lái)實(shí)現(xiàn)哈希值對(duì)應(yīng)數(shù)組下標(biāo)的映射。
2逊朽、哈希表的容量一定要是2的整數(shù)次冪罕伯,保證散列的均勻。
3叽讳、當(dāng)哈希表的size>threshold時(shí),則調(diào)用Resize方法追他,此方法新建一個(gè)2*size的數(shù)組,并將舊數(shù)組中的數(shù)據(jù)復(fù)制到新數(shù)組中岛蚤,所以效率很低邑狸。


參考原文:
http://www.cnblogs.com/ITtangtang/p/3948406.html#a9

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市涤妒,隨后出現(xiàn)的幾起案子单雾,更是在濱河造成了極大的恐慌,老刑警劉巖她紫,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铁坎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡犁苏,警方通過(guò)查閱死者的電腦和手機(jī)硬萍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)围详,“玉大人朴乖,你說(shuō)我怎么就攤上這事祖屏。” “怎么了买羞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵袁勺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我畜普,道長(zhǎng)期丰,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任吃挑,我火速辦了婚禮钝荡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘舶衬。我一直安慰自己埠通,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布逛犹。 她就那樣靜靜地躺著端辱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪虽画。 梳的紋絲不亂的頭發(fā)上舞蔽,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音码撰,去河邊找鬼喷鸽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛灸拍,可吹牛的內(nèi)容都是我干的做祝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鸡岗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼混槐!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起轩性,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤声登,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后揣苏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體悯嗓,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年卸察,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脯厨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坑质,死狀恐怖合武,靈堂內(nèi)的尸體忽然破棺而出临梗,到底是詐尸還是另有隱情,我是刑警寧澤稼跳,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布盟庞,位于F島的核電站,受9級(jí)特大地震影響汤善,放射性物質(zhì)發(fā)生泄漏什猖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一红淡、第九天 我趴在偏房一處隱蔽的房頂上張望不狮。 院中可真熱鬧,春花似錦锉屈、人聲如沸荤傲。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至终佛,卻和暖如春俊嗽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铃彰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工绍豁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牙捉。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓竹揍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親邪铲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子芬位,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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