天天看點

HashMap如何導緻CPU100%的?

一、HashMap的資料結構?

JDK7:數組+連結清單

JDK8:數組+連結清單+紅黑樹

1.1 數組的存儲特點

HashMap如何導緻CPU100%的?

查詢:連續性,有下标,查詢速度快。

插入:後面的節點需要全部移動,時間複雜度高。

删除:節點下标全部需要改變,除了最後一個節點。

如:java中的ArrayList就是數組實作的

1.2 連結清單的存儲特點

HashMap如何導緻CPU100%的?

删除:迅速,簡單。 時間複雜度為O1.

查詢:啥時間複雜度為On,需要從頭到尾周遊。

如java中的LinkList的資料結構為雙向連結清單。

HashMap如何導緻CPU100%的?

1.3 雜湊演算法的底層是是如何實作的?

HashMap如何導緻CPU100%的?

也叫雜湊演算法,把任意長度的值散列變換成固定的值,通過位址通路,加快通路速度。

碰撞?沖突?如何解決?

加一個指針就好啦!

二、JDK8為何引入紅黑樹?

想想一下,JDK7數組+連結清單的資料結構,如果出現哈希值全部一樣的情況,那麼資料結構中就會存在嚴重的哈希沖突,這個時候數組中隻有少數的數組有資料,然而卻存在相當大且長的連結清單,那麼查詢的速度嚴重降低!!!!!

HashMap如何導緻CPU100%的?

門檻值為8,超過了8,轉化為紅黑樹。

2.1 紅黑樹

紅黑樹是一種特化的AVL樹(平衡二叉樹),都是在進行插入和删除操作時通過特定操作保持二叉查找樹的平衡,進而獲得較高的查找性能。

2.2 擴充因子0.75

三、HashMap 導緻 CPU 100%

繼續閱讀