Map 存儲鍵值對,與 Collection 存儲單個元素形成「雙列」與「單列」集合體系。
| 類別 | 方法 | 說明 |
|---|---|---|
| 添加 | V put(K, V) | 返回舊值,無則 null |
putAll(Map) | 批量添加 | |
| 刪除 | V remove(K) | 返回被刪除的值 |
void clear() | 清空 | |
| 判斷 | boolean containsKey(K) | |
boolean containsValue(V) | ||
boolean isEmpty() | ||
| 獲取 | V get(K) | 無鍵返回 null |
int size() | 鍵值對數量 | |
| 視圖 | Set<K> keySet()、Collection<V> values()、Set<Entry<K,V>> entrySet() | 三種遍歷入口 |
| 實現類 | 底層結構 | 線程安全 | 允許 Null Key | 允許 Null Value | 有序性 | 典型場景 |
|---|---|---|---|---|---|---|
| Hashtable | 哈希表 | ✓ (synchronized) | ✗ | ✗ | 無序 | 舊代碼兼容,極少用 |
| Properties | 繼承 Hashtable | ✓ | ✗ (String) | ✗ (String) | 無序 | 配置文件加載 (.properties) |
| HashMap | 哈希表 (JDK8+ 紅黑樹優化) | ✗ | ✓ | ✓ | 無序 | 高性能通用 Map |
| TreeMap | 紅黑樹 | ✗ | ✗ | ✓ | Key 自然序/自定義 Comparator 排序 | 需要有序遍歷 |
| LinkedHashMap | 哈希表 + 雙向鏈表 | ✗ | ✓ | ✓ | 插入序/訪問序 | LRU 緩存、保持插入順序 |
| ConcurrentHashMap | 分段鎖/CAS (JDK8+) | ✓ (高並發) | ✗ | ✗ | 無序 | 多線程環境高性能 Map |
load(InputStream))。避免在高併發下直接使用 HashMap(可能導致死循環),亦避免使用 Hashtable(性能差,已被 ConcurrentHashMap 取代)。