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值是否相等,相等...