通俗理解HashMap

2021-10-11 17:42:35 字數 833 閱讀 5848

原理:hashmap是以key-value鍵值對的形式存在著的,大致邏輯為進行put時,根據key值,進行hashing,生成hashcode,對應到bucket的位置然後在當前位置進行key-value儲存。

根據key值對應的每個字元的阿斯克碼的和再取模於的map長度得出的值都是固定的對應的下標值

hash碰撞指的就是可能不同的key值 進行hashing所生成的hashcode是相同的,也就意味著 bucket的位置也會相同,這個時候hashmap中的key-value物件會以鍊錶的資料結構儲存。

jdk1.8之後 hashmap 採用 陣列 + 鍊錶 + 紅黑樹的 資料結構 ,如果鍊錶的長度 大於8 ,該鍊錶將會轉為紅黑樹的資料結構進行儲存 大大提高查詢效率, 如果當前資料長度小於6時 紅黑樹 又會轉為鍊錶的形式進行儲存

hashmap在put的時候會進行判斷 當前map中的長度  如果要儲存的長度大於 當前長度*0.75 時 會進行擴容 擴容的長度為當前的長度*2 (當前長度為16 * 0.75 = 12  比如要存13時 會觸發擴容機制 擴容後的長度為32),擴容後的資料 會進行重新hash 放到新的bucket位置

擴容存在的問題     jdk1.7之前採用的頭插法 在多執行緒情況下 會產生死迴圈的情況  1.7之後 改為尾插法  解決了這個問題 多執行緒 情況下 還是不要用hashmap

1.7 以前的資料結構

1.8的資料結構

redis通俗理解

一,redis是什麼 redis是一種支援key value等多種資料結構的儲存系統。可用於快取,事件發布或訂閱,高速佇列等場景。該資料庫使用ansi c語言編寫,支援網路,提供字串,雜湊,列表,佇列,集合結構直接訪問,基於記憶體,可持久化。二,支援的語言 三,redis的應用場景有哪些四,redi...

PID通俗理解

pid 即比例積分微分反饋調節。學習pid總是有各種各樣的問題。後來看了各種書,網上請教了不少人,還是一頭霧水,知道這個東西,但是它是怎麼工作的呢?比例積分微分是怎麼配合的呢?我們假如有一杯水,水裡加乙個加熱器,我們可以控制加熱器的電流來保持水溫恆定,如果水溫沒有任何加熱條件下為30度,現在我在水裡...

NP問題通俗理解

時間複雜度 時間複雜度並不是處理乙個問題要花費多少時間,我們研究解決乙個特定的資料問題花費多少時間是沒有意義的,時間複雜度衡量的是隨著問題規模的擴大,程式所需要的時間長度增加的情況。p問題 問題可以在多項式時間內求解的統稱為p問題 可以在多項式內求解的問題一定可以在多項式時間內驗證,所以p問題一定是...