HashMap02


在這裏插入圖片描述

  • vector是線程安全的,但是因爲方法加了synchronized,必須串行執行,不適用於高併發且對性能要求較高的場景,所以目前很少用。
  • map的key不可重複(通過set組織起來,所以有去重功能),value可以重複(通過collection組織起來)。

HashMap

  • 結構:數組+鏈表+紅黑樹
  • put方法在這裏插入圖片描述
  • 提升性能方法:轉紅黑樹、哈希運算
  • 擴容問題:1)多線程環境下,調整大小存在條件競爭,容易造成死鎖 (非線程安全)
                      2)rehashing是一個比較耗時的過程
  • 加載因子爲0.75
    1)若加載因子過大,擴容門檻提高,擴容頻率降低,Hash衝突增多,需要用鏈表或紅黑樹存儲元素,運行效率會降低
    2)若加載因子過小,擴容門檻降低,佔用空間增加,元素存儲稀疏,操作性能提高。
    3)容量需要是2的冪
  • 線程不安全改善
    1)
Map hashMap = new HashMap();
Map safeHashMap = Collections.synchronizedMap(hashMap);

缺點:多線程環境下串行執行,效率低
2)使用ConcurrentHashMap

ConcurrentHashMap

  • 結構:數組+鏈表+紅黑樹
  • CAS+synchronized使鎖更加細化,保證併發安全
  • 只鎖定當前鏈表/紅黑樹首結點
  • put
    在這裏插入圖片描述
  • HashMap、HashTable、ConcurrentHashMap區別
    在這裏插入圖片描述

異常

  • Error和Exception
    1)聯繫:均繼承自Throwable
    2)區別:Error是程序無法處理的異常(JVM負責),,Exception是可以處理
  • 運行時異常(程序負責), 非運行時異常(java編譯器負責)
    在這裏插入圖片描述
  • 異常處理順序
    1)子類異常不能放在父類後面,因爲異常已經被父類處理
    在這裏插入圖片描述
    2)異常只會被一個catch塊處理,且按順序匹配
    在這裏插入圖片描述
  • 異常處理消耗性能
    1)try catch塊影響jvm優化
    2)異常對象實例需要保存棧快照等信息,開銷大
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章