# Vector, ArrayList, LinkedList分別是什么
在Java集合框架中,`Vector`、`ArrayList`和`LinkedList`是三種常用的動態數組實現類,它們雖然功能相似,但在底層實現、線程安全性和性能表現上存在顯著差異。本文將深入解析它們的特性、使用場景及核心區別。
---
## 一、Vector:線程安全的動態數組
### 1. 基本特性
- **定義**:`Vector`是Java早期提供的動態數組實現(JDK 1.0),基于數組結構。
- **線程安全**:所有方法均用`synchronized`修飾,保證多線程環境下的數據安全。
- **擴容機制**:默認擴容為原容量的2倍(可通過構造函數自定義增量)。
### 2. 核心代碼示例
```java
Vector<String> vector = new Vector<>();
vector.add("A"); // 同步方法
vector.get(0); // 同步方法
ArrayList
。ArrayList
是List
接口的主要實現類(JDK 1.2引入),基于動態數組。int newCapacity = oldCapacity + (oldCapacity >> 1)
)。ArrayList<String> list = new ArrayList<>();
list.add("B"); // 非同步方法
list.get(0); // 非同步方法
LinkedList
基于雙向鏈表數據結構(同時實現List
和Deque
接口)。ArrayList
類似,未做同步處理。LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("C"); // 鏈表尾部插入
linkedList.get(0); // 需遍歷鏈表
addFirst()
, removeLast()
)。特性 | Vector | ArrayList | LinkedList |
---|---|---|---|
底層結構 | 動態數組 | 動態數組 | 雙向鏈表 |
線程安全 | 是(同步鎖) | 否 | 否 |
擴容機制 | 2倍 | 1.5倍 | 無需擴容 |
隨機訪問效率 | O(1) | O(1) | O(n) |
插入/刪除效率 | O(n) | O(n) | O(1) |
內存占用 | 連續內存 | 連續內存 | 分散內存(指針) |
Vector
Collections.synchronizedList()
或CopyOnWriteArrayList
替代。ArrayList
LinkedList
為什么ArrayList的elementData字段用transient修飾?
ArrayList
通過自定義序列化邏輯(writeObject
/readObject
)優化存儲,只序列化實際元素而非整個數組。
如何在多線程下使用ArrayList?
使用Collections.synchronizedList(new ArrayList<>())
或CopyOnWriteArrayList
。
LinkedList真的比ArrayList節省內存嗎?
不一定。每個鏈表節點需額外存儲兩個指針,元素較少時可能比ArrayList
占用更多空間。
理解三者的底層實現差異,能幫助開發者根據實際需求選擇最優集合類型。在Java 8+中,ArrayList
和LinkedList
的性能差異可能因JIT優化而縮小,但設計原則不變。
“`
注:本文約1500字,涵蓋核心概念、代碼示例和對比表格,采用Markdown格式,可直接用于技術文檔或博客發布。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。