Map
Map是由Key-Value所組成的
而Key的部分不能重複,因為是Set
- HashMap:
- 使用哈希表存儲鍵值對
- 平均情況下,基本操作(獲取、插入、刪除)具有常數時間複雜度
- 不保證項目的特定順序
- 允許鍵和值為空( 空字串、null)
- 非線程安全
- LinkedHashMap:
- 保持項目插入的順序
- 使用哈希表和鏈表實現有序遍歷
- 提供類似
HashMap
的性能,但稍微慢一些,因為需要維護順序 - 允許鍵和值為空( 空字串、null)
- 非線程安全
- TreeMap:
- 根據鍵的自然順序或自定義
Comparator
進行排序 - 使用紅黑樹結構維護項目
- 基本操作(獲取、插入、刪除)具有對數時間複雜度
- 提供有序遍歷
- 不允許鍵為空,但允許值為空 (因為要以鍵做排序)
- 非線程安全
- ConcurrentHashMap:
- 提供線程安全的操作,支持併發訪問
- 將底層數據結構分為多個段,允許對不同段進行並發操作
- 適用於高並發場景,具有良好的擴展性
- 對於非並發訪問,性能與
HashMap
相似 - 允許鍵和值為空( 空字串、null)
簡單來講,併發就是多個執行緒在同個時間內不斷切換、互相搶資源地在處理任務。是在瞬間、極短的時間內!
- Hashtable:
- 在
ConcurrentHashMap
出現後被標記為過時 (deprecated) - 提供線程安全的操作,支持併發訪問
- 提供類似
HashMap
的功能,但具有同步方法 - 不允許鍵和值為空
- WeakHashMap (我完全沒用到過):
- 允許鍵在不再有強引用時被垃圾回收
- 適用於動態創建鍵並在內存壓力下釋放的情況
- 提供類似
HashMap
的功能,但具有弱鍵 - 非線程安全