面試題總結:HashMap實現原理
1.簡單瞭解:
JDK1.8中,HashMap採用位桶+連結串列+紅黑樹
實現,當連結串列長度超過閾值(8)時,將連結串列轉換為紅黑樹,這樣大大減少了查詢時間。
HashCode是jdk根據物件的地址或字串或者數字利用hash演算法計算出的int型別的數值。
2.HashMap實現原理詳解:
陣列->連結串列->紅黑樹
首先有一個每個元素都是連結串列的陣列,當新增一個元素(key-value)時,就首先計算元素key的hash值
,以此確定插入陣列中的位置,但是可能存在同一hash值的元素已經被放在陣列同一位置了,這時就新增到同一hash值的元素的後面,他們在陣列的同一位置,但是形成了連結串列
,同一各連結串列上的Hash值是相同的,所以說陣列存放的是連結串列。而當連結串列長度太長時,連結串列就轉換為紅黑樹
,這樣大大提高了查詢的效率。
在jdk8中,HashMap處理“碰撞”增加了紅黑樹這種資料結構,當碰撞結點較少時,採用連結串列儲存,當較大時(>8個),採用紅黑樹(特點是查詢時間是O(logn))儲存(有一個閥值控制,大於閥值(8個),將連結串列儲存轉換成紅黑樹儲存)
3.紅黑樹是一種自平衡二叉查詢樹
紅黑樹是每個節點都帶有顏色屬性的二叉查詢樹,顏色或紅色或黑色。 對於任何有效的紅黑樹都有以下要求:
- 1)節點是紅色或黑色。
- 2)根節點是黑色。
- 3)每個葉節點是黑色的。
- 4)每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
- 5從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。
相關文章
- 面試必問:HashMap 底層實現原理分析面試HashMap
- HashMap實現原理HashMap
- java面試題-HashMap的工作原理Java面試題HashMap
- HashMap的實現原理HashMap
- HashMap底層實現原理HashMap
- hashmap實現原理淺析HashMap
- HashMap面試題HashMap面試題
- Java中HashMap的實現原理JavaHashMap
- Java HashMap工作原理及實現JavaHashMap
- HashMap的實現原理 HashMap底層實現,hashCode如何對應bucket?HashMap
- HashMap 實現原理與原始碼分析HashMap原始碼
- HashMap實現原理及原始碼分析HashMap原始碼
- hashmap與Hashtable實現原理淺析HashMap
- Java HashMap 的實現原理詳解JavaHashMap
- Java8 HashMap實現原理探究JavaHashMap
- 面試題總結面試題
- HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別HashMap
- css面試題總結CSS面試題
- iOS 面試題總結iOS面試題
- PHP面試題總結PHP面試題
- 面試問題總結面試
- Kafka面試題總結Kafka面試題
- Ajax面試題總結面試題
- 面試刷題總結面試
- 面試題總結-最新面試題
- iOS底層原理總結 - 關聯物件實現原理iOS物件
- HashMap中面試常問的工作原理HashMap面試
- 記錄近期面試題,面試總結面試題
- 二分查詢實現----面試總結面試
- HashMap常見面試題整理HashMap面試題
- 前端面試題總結前端面試題
- 面試題總結-Java部分面試題Java
- 前端面試題(總結)前端面試題
- PHP面試問題總結PHP面試
- REDIS面試問題總結Redis面試
- RabbitMq面試問題總結MQ面試
- iOS面試題總結(七)iOS面試題
- iOS面試題總結(三)iOS面試題