- HashMap概述
HashMap是基于哈希表的Map接口的非同步實現(xiàn)。此實現(xiàn)提供所有可選的映射操作,并允許使用null值和null鍵。此類不保證映射的順序,特別是它不保證該順序恒久不變。
- HashMap的數(shù)據(jù)結構
HashMap實際上是一個“鏈表散列”的數(shù)據(jù)結構,即數(shù)組和鏈表的結合體。一個是數(shù)組,另外一個是鏈表,所有的數(shù)據(jù)結構都可以用這兩個基本結構來構造的。

-
HashMap的存取 (hashCode一樣處理方式)
HashMap的功能是通過“鍵(key)”能夠快速的找到“值”。下面我們分析下HashMap存數(shù)據(jù)的基本流程:
1、 當調用put(key,value)時,首先獲取key的hashcode,int hash = key.hashCode();
2、 再把hash通過一下運算得到一個int h.
HashMap會先用key的hash值來檢查是否發(fā)生了hash碰撞,也就是對應的位置是否為空,為空的話就創(chuàng)建一個Entity<K,V>對象,在 table[index]位置上插入,這樣插入結束;如果有的話,通過鏈表的遍歷方式去逐個遍歷,看看有沒有已經存在的key,有的話用新的value替 換老的value;如果沒有,則在table[index]插入該Entity,把原來在table[index]位置上的Entity賦值給新的 Entity的next,這樣插入結束。
4、加載因子
當 創(chuàng)建 HashMap 時,有一個默認的負載因子(load factor),其默認值為 0.75,這是時間和空間成本上一種折衷:增大負載因子可以減少 Hash 表(就是那個 Entry 數(shù)組)所占用的內存空間,但會增加查詢數(shù)據(jù)的時間開銷,而查詢是最頻繁的的操作(HashMap 的 get() 與 put() 方法都要用到查詢);減小負載因子會提高數(shù)據(jù)查詢的性能,但會增加 Hash 表所占用的內存空間。我們可以在創(chuàng)建 HashMap 時根據(jù)實際需要適當?shù)卣{整 load factor 的值;如果程序比較關心空間開銷、內存比較緊張,可以適當?shù)卦黾迂撦d因子;如果程序比較關心時間開銷,內存比較寬裕則可以適當?shù)臏p少負載因子。通常情況 下,無需改變負載因子的值
加載因子是表示Hsah表中元素的填滿的程度.若:加載因子越大,填滿的元素越多,好處是,空間利用率高了,但:沖突的機會加大了.反之,加載因子越小,填滿的元素越少,好處是:沖突的機會減小了,但:空間浪費多了,沖突的機會越大,則查找的成本越高.反之,查找的成本越小.因而,查找時間就越小.