# Java集合中List、Set以及Map的概述
## 目錄
1. [Java集合框架簡介](#1-java集合框架簡介)
2. [List接口及實現類](#2-list接口及實現類)
- 2.1 [ArrayList](#21-arraylist)
- 2.2 [LinkedList](#22-linkedlist)
- 2.3 [Vector](#23-vector)
3. [Set接口及實現類](#3-set接口及實現類)
- 3.1 [HashSet](#31-hashset)
- 3.2 [LinkedHashSet](#32-linkedhashset)
- 3.3 [TreeSet](#33-treeset)
4. [Map接口及實現類](#4-map接口及實現類)
- 4.1 [HashMap](#41-hashmap)
- 4.2 [LinkedHashMap](#42-linkedhashmap)
- 4.3 [TreeMap](#43-treemap)
- 4.4 [Hashtable](#44-hashtable)
5. [性能對比與選型建議](#5-性能對比與選型建議)
6. [線程安全與并發集合](#6-線程安全與并發集合)
7. [總結](#7-總結)
---
## 1. Java集合框架簡介
Java集合框架(Java Collections Framework,JCF)是為表示和操作集合而規定的一種統一體系結構,包含:
- **接口**:定義集合的抽象行為
- **實現**:接口的具體實現類
- **算法**:對集合進行操作的方法(如排序、搜索)

主要分為兩大分支:
- **Collection**:存儲單一元素
- List:有序可重復
- Set:無序不可重復
- **Map**:存儲鍵值對
---
## 2. List接口及實現類
### 2.1 ArrayList
```java
// 典型初始化方式
List<String> list = new ArrayList<>();
特點: - 基于動態數組實現 - 默認初始容量10,擴容1.5倍 - 隨機訪問效率高(O(1)) - 插入刪除效率低(需移動元素)
源碼分析:
// JDK 1.8擴容核心代碼
private void grow(int minCapacity) {
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
elementData = Arrays.copyOf(elementData, newCapacity);
}
特點: - 基于雙向鏈表實現 - 插入刪除效率高(O(1)) - 隨機訪問效率低(O(n)) - 實現了Deque接口,可作為隊列使用
內存結構:
Node<E> {
E item;
Node<E> next;
Node<E> prev;
}
遺留類特點: - 線程安全(方法同步) - 擴容策略不同(默認2倍) - 被Collections.synchronizedList替代
Set<String> set = new HashSet<>();
實現原理: - 基于HashMap實現(值存于key) - 依賴hashCode()和equals() - 允許null元素
哈希沖突解決: - 鏈表+紅黑樹(JDK8+)
特點: - 繼承HashSet - 維護插入順序的雙向鏈表 - 迭代效率高于HashSet
紅黑樹特性: - 元素必須實現Comparable - 自然排序或Comparator定制 - 操作時間復雜度O(log n)
JDK8優化: - 數組+鏈表+紅黑樹 - 閾值=8轉樹,=6退鏈表 - 擾動函數優化哈希
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
訪問順序特性:
// 按訪問順序排序的構造方法
Map<String, Integer> lruCache = new LinkedHashMap(16, 0.75f, true);
紅黑樹應用: - 鍵必須可比較 - 提供subMap()等范圍查詢
與HashMap對比:
| 特性 | Hashtable | HashMap |
|---|---|---|
| 線程安全 | 是 | 否 |
| 允許null | 否 | 是 |
| 繼承關系 | Dictionary | AbstractMap |
List實現類對比:
| 操作 | ArrayList | LinkedList |
|---|---|---|
| get() | O(1) | O(n) |
| add() | O(1) | O(1) |
| remove() | O(n) | O(1) |
選型原則: 1. 需要快速訪問 → ArrayList 2. 頻繁插入刪除 → LinkedList 3. 需要去重 → HashSet 4. 需要排序 → TreeSet 5. 鍵值存儲 → HashMap
解決方案: 1. Collections.synchronizedXXX() 2. CopyOnWriteArrayList 3. ConcurrentHashMap 4. ConcurrentSkipListSet
ConcurrentHashMap優化: - JDK7:分段鎖 - JDK8:CAS + synchronized
Java集合框架核心要點: 1. List處理有序集合,Set確保元素唯一 2. Map提供高效的鍵值查找 3. 不同實現有顯著性能差異 4. 線程安全場景需特殊處理
未來發展趨勢: - 更優的并發集合實現 - 針對大數據集的優化 - 與函數式編程更深度集成 “`
注:實際文檔應包含: 1. 完整的代碼示例 2. 性能測試數據圖表 3. 更詳細的內存結構圖示 4. 各實現類的完整API說明 5. 使用場景的具體案例
建議通過Java官方文檔和源碼進行內容補充,確保技術準確性。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。