一、HashMap的資料結構?
JDK7:數組+連結清單
JDK8:數組+連結清單+紅黑樹
1.1 數組的存儲特點
查詢:連續性,有下标,查詢速度快。
插入:後面的節點需要全部移動,時間複雜度高。
删除:節點下标全部需要改變,除了最後一個節點。
如:java中的ArrayList就是數組實作的
1.2 連結清單的存儲特點
删除:迅速,簡單。 時間複雜度為O1.
查詢:啥時間複雜度為On,需要從頭到尾周遊。
如java中的LinkList的資料結構為雙向連結清單。
1.3 雜湊演算法的底層是是如何實作的?
也叫雜湊演算法,把任意長度的值散列變換成固定的值,通過位址通路,加快通路速度。
碰撞?沖突?如何解決?
加一個指針就好啦!
二、JDK8為何引入紅黑樹?
想想一下,JDK7數組+連結清單的資料結構,如果出現哈希值全部一樣的情況,那麼資料結構中就會存在嚴重的哈希沖突,這個時候數組中隻有少數的數組有資料,然而卻存在相當大且長的連結清單,那麼查詢的速度嚴重降低!!!!!
門檻值為8,超過了8,轉化為紅黑樹。
2.1 紅黑樹
紅黑樹是一種特化的AVL樹(平衡二叉樹),都是在進行插入和删除操作時通過特定操作保持二叉查找樹的平衡,進而獲得較高的查找性能。