HashMap原理和rehash解釋
阿新 • • 發佈:2018-12-30
採用hash結構的容器,除了採用hash演算法來決定集合中元素的位置
並通過hash演算法來控制集合的大小
HashMap的內部實現機制
HashMap的內部實現機制是對資料結構中雜湊表(Hash Table)的實現,Hash表又叫散列表。
Hash表是根據關鍵碼Key來訪問其對應的值Value的資料結構,他是通過一個對映函式把關鍵碼對映到表中一個位置
來訪問該位置的值,從而加快查詢的速度。這個對映函式叫做Hash函式,存放的陣列叫做Hash表。
Hash的實現:
主要是 雜湊演算法 和 衝突的解決
計算出map中key的雜湊值,在雜湊表中找到<key,value>的位置,根據key找value
當多個雜湊值衝突的時候,在雜湊值的同一個位置上使用連結串列結構來儲存多個物件,而hashMap訪問map的時候
也是根據key的hashCode的值來快速定位,入夥HashMap中倆個以上的元素具有相同的HashCode值,將會導致效能下降
rehash的解釋:
在建立hashMAP的時候可以設定來個引數,一般預設
初始化容量:建立hash表時桶的數量
負載因子:負載因子=map的size/初始化容量
當hash表中的負載因子達到負載極限的時候,hash表會自動成倍的增加容量(桶的數量),並將原有的物件
重新的分配並加入新的桶內,這稱為rehash。這個過程是十分好效能的,一般不要
一般建議設定比較大的初始化容量,防止rehash,但是也不能設定過大,初始化容量過大 浪費空間
並通過hash演算法來控制集合的大小
HashMap的內部實現機制
HashMap的內部實現機制是對資料結構中雜湊表(Hash Table)的實現,Hash表又叫散列表。
Hash表是根據關鍵碼Key來訪問其對應的值Value的資料結構,他是通過一個對映函式把關鍵碼對映到表中一個位置
來訪問該位置的值,從而加快查詢的速度。這個對映函式叫做Hash函式,存放的陣列叫做Hash表。
Hash的實現:
主要是 雜湊演算法 和 衝突的解決
計算出map中key的雜湊值,在雜湊表中找到<key,value>的位置,根據key找value
當多個雜湊值衝突的時候,在雜湊值的同一個位置上使用連結串列結構來儲存多個物件,而hashMap訪問map的時候
也是根據key的hashCode的值來快速定位,入夥HashMap中倆個以上的元素具有相同的HashCode值,將會導致效能下降
rehash的解釋:
在建立hashMAP的時候可以設定來個引數,一般預設
初始化容量:建立hash表時桶的數量
負載因子:負載因子=map的size/初始化容量
當hash表中的負載因子達到負載極限的時候,hash表會自動成倍的增加容量(桶的數量),並將原有的物件
重新的分配並加入新的桶內,這稱為rehash。這個過程是十分好效能的,一般不要
一般建議設定比較大的初始化容量,防止rehash,但是也不能設定過大,初始化容量過大 浪費空間
參考 java瘋狂講義