面試題總結 HashMap實現原理

2021-10-10 02:27:54 字數 676 閱讀 7143

jdk1.8中,hashmap採用位桶+鍊錶+紅黑樹實現,當鍊表長度超過閾值(8)時,將鍊錶轉換為紅黑樹,這樣大大減少了查詢時間。

hashcode是jdk根據物件的位址或字串或者數字利用hash演算法計算出的int型別的數值。

陣列->鍊錶->紅黑樹

首先有乙個每個元素都是鍊錶的陣列,當新增乙個元素(key-value)時,就首先計算元素key的hash值,以此確定插入陣列中的位置,但是可能存在同一hash值的元素已經被放在陣列同一位置了,這時就新增到同一hash值的元素的後面,他們在陣列的同一位置,但是形成了鍊錶,同一各煉表上的hash值是相同的,所以說陣列存放的是鍊錶。而當鍊錶長度太長時,鍊錶就轉換為紅黑樹,這樣大大提高了查詢的效率。

在jdk8中,hashmap處理「碰撞」增加了紅黑樹這種資料結構,當碰撞結點較少時,採用鍊錶儲存,當較大時(>8個),採用紅黑樹(特點是查詢時間是o(logn))儲存(有乙個閥值控制,大於閥值(8個),將鍊錶儲存轉換成紅黑樹儲存)

紅黑樹是每個節點都帶有顏色屬性的二叉查詢樹,顏色或紅色或黑色。 對於任何有效的紅黑樹都有以下要求:

面試題 HashMap詳解

先上hashcode和equals原始碼 jni,呼叫底層其它語言實現 public native inthashcode 預設同 直接比較物件 public boolean equals object obj equals方法 string類中重寫了equals方法,比較的是字串值,看一下原始碼實...

HashMap常見面試題

1.你知道hashmap的工作原理嗎?你知道hashmap的get 方法的工作原理嗎?hashmap基於hashing原理,我們通過put 和get 方法儲存和獲取物件。當我們將鍵值對傳遞給put 方法時,它呼叫鍵物件的hashcode 方法來計算hashcode,讓後找到bucket位置來儲存en...

HashMap常見的面試題

1.hashmap底層是如何實現的?首先底層資料結構是由陣列 鍊錶組成鍊錶雜湊。hashmap先得到key的雜湊值,在通過擾動函式 減少碰撞次數 得到hash值,接著通過hash n 1 n位table的長度,運算後得到陣列的索引值。如果當前節點存在元素,則通過比較hash值和key值是否相等,相等...