在jdk8中,hashmap是用了陣列和鍊錶以及紅黑樹這三種資料結構
首先,在hashmap類中,都有乙個table陣列,我們在儲存資料時,對這個資料的hash值進行一系列的計算 計算出它在table中的位置(下標),並將它存放進去
然而,我們在hashmap是什麼 中提到,不同的物件的hash值可能相同,那麼相同的hash值會導致不同的資料在陣列中有相同的儲存位置,我們雖然創造了一系列的解決辦法,但並不能完全的避免這種衝突,那麼,當產生衝突時,hashmap是怎樣解決的呢?
當產生衝突時,如data1和data2 ,我們把data2放在data1後的列表中,這樣就不會因為雜湊值的衝突而對資料產生影響。
1.時間複雜度
我們知道,當某條鍊錶的長度大於8時,就會將其轉換為紅黑樹。遍歷一條鍊錶的時間複雜度o(n),當一條鍊錶過長時,遍歷這條鍊錶可能會花很長時間,而遍歷一顆紅黑樹的時間複雜度為o(logn),從而減少了插入或查詢的時間
2.紅黑樹
簡單總結下紅黑樹是什麼:一種二叉查詢樹,但在每個結點上增加乙個儲存位表示結點的顏色,可以是red或black。通過對任何一條從根到葉子的路徑上各個結點著色方式的限制,紅黑樹確保沒有一條路徑會比其他路徑長出倆倍,因而是接近平衡的。
也就是說,紅黑樹是一種相對平衡的查詢二叉樹,這使他不僅便於查詢,也便於插入和刪除,這對於既需要插入也需要查詢的hashmap是非常有利的
關於HashMap的資料結構
一hashmap的資料結構 jdk1.8以前是陣列 鍊錶 jdk1.8以後是陣列 鍊錶 紅黑色 二資料結構的物理結構 是指資料的邏輯結構在計算機中的儲存形式 資料元素的儲存結構形式有如下兩種 兩種結構,各有優點和缺點,可以相互結合的運用 hashmap正好兩種資料結構都用到了 三陣列 hashmap...
資料結構 手寫hashmap
define size 100 位址鏈個數,足夠大 class simhash public simhash simhash delete map 清除陣列 void insert int key,int value node p map hash key 確定位址鏈索引 node q new no...
Java 資料結構 HashMap
hashmap 特點 1.map 無序不可重複 2.hash 通過map的key的hashcode的一次hash來決定儲存位置,通過key的 與equals方法來確定是否重複 原始碼分析 public v put k key,v value 如果 i 索引處的 entry 為 null,表明此處還沒...