【Java基础】HashMap原理详解
生活随笔
收集整理的這篇文章主要介紹了
【Java基础】HashMap原理详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【Java基礎】HashMap原理詳解
- HashMap的實現
- 1. 數組
- 2.線性鏈表
- 3.紅黑樹
- 3.1概述
- 3.2性質
- 4.HashMap擴容死鎖
- 5. BATJ一線大廠技術棧
HashMap的實現
- ConcurrentHashMap從JDK1.5開始隨著java.util.concurrent包一起引入JDK,主要為了解決HashMap線程不安全,和HashTable效率不高的問題
- HashMap在多線程編程中是線程不安全的,而HashTable使用Synchronized修飾方法而效率低
- ConcurrentHashMap是一個在多線程環境下,線程安全且高性能的HashMap解決方案
- 底層實現:數組+鏈表+紅黑樹(since JDK1.8)
1. 數組
- 使用一段連續存儲單元存儲數據,對于指定下標的查找,時間復雜度為O(1),對于一般的插入刪除操作,涉及數組元素的移動,其平均時間復雜度為O(n)
- 通過Object.hashCode()方法得到固定長度哈希值,然后對數組長度取余,得到Object在數組中的坐標
- 默認初始化長度:16,數組長度一定是2的倍數
2.線性鏈表
- 對于鏈表的新增、刪除操作,在查找到操作位置后,只需要處理結點間的引用即可,時間復雜度為O(1)
- 查找操作需要遍歷鏈表的所有結點,復雜度為O(n)
- 解決哈希沖突,避免數據被覆蓋
3.紅黑樹
3.1概述
- 當哈希沖突嚴重時,鏈表冗長導致效率低下
- 紅黑樹是一種接近平衡的二叉搜索樹,在每個結點上增加一個存儲位表示結點的顏色,可以是Red或Black。
- 通過對任何一條從根到葉子的路徑上,由于各個結點著色方式的限制,紅黑樹確保沒有一條路徑會比其他路徑長出兩倍,因此接近平衡。
- 支持查找、插入、刪除等操作,平均時間復雜度為O(logn)
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-NnWwAoYR-1589878270141)(Untitled.png)]
3.2性質
- 每個結點要么是紅的,要么是黑的
- 根結點是黑的
- 葉結點都是黑的
- 如果一個結點是紅的,那么兩個兒子都是黑的
- 對于任意結點而言,到葉結點的每條路徑都包含相同數目的黑結點
4.HashMap擴容死鎖
- 擴容因子:0.75
- 鏈表轉紅黑樹時,鏈表長度為8
5. BATJ一線大廠技術棧
- 分布式架構
- 微服務架構
- 源碼分析
- 并發編程
- 性能優化
- 數據結構與算法
- 高并發實戰
- 工程化協作
總結
以上是生活随笔為你收集整理的【Java基础】HashMap原理详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【建议收藏】HTTP与HTTPS的区别
- 下一篇: 【Java基础】递归输出目录下所有文件路