共同點
- 均實現
List<E> 接口,有序、允許重複、支援下標訪問。
- 底層均為動態擴容的
Object[] elementData 陣列。
核心差異:擴容策略
ArrayList(1.5 倍 + 1)
int newCapacity = (oldCapacity * 3) / 2 + 1;
// 例:10 → 16 → 25 → 38...
Vector(2 倍或自定義增量)
int newCapacity = (capacityIncrement > 0)
? (oldCapacity + capacityIncrement)
: (oldCapacity * 2);
// 預設 capacityIncrement = 0 → 翻倍
// 例:10 → 20 → 40 → 80...
線程安全性
| 特性 | Vector | ArrayList |
| 方法級同步 | 所有公共方法 synchronized | 無同步,非線程安全 |
| 性能 | 低(鎖開銷) | 高(無鎖) |
| 替代方案 | 已過時 | Collections.synchronizedList 或 CopyOnWriteArrayList |
其他細節差異
- 枚舉器:Vector 返回
Enumeration(舊)+ Iterator;ArrayList 僅 Iterator/ListIterator。
- 預設容量:兩者均為 10。
- 序列化:Vector 寫入
capacityIncrement,ArrayList 不寫入擴容因子。
選型建議
- 單線程/高性能:首選
ArrayList。
- 多線程讀多寫少:
CopyOnWriteArrayList。
- 多線程寫多:
Collections.synchronizedList(new ArrayList()) 或並發包 ConcurrentLinkedQueue(無序)。
- 避免使用 Vector:歷史遺留類,JDK 9+ 標註
@Deprecated 傾向。
- 上一篇文章: Maven 多模塊項目實戰:從父 POM 到模塊依賴管理全流程
- 下一篇文章: Java 內部類完全指南:成員、靜態、局部、匿名四大類型與最佳實踐
Copyright ©
程式碼之家 All Rights Reserved