兩者底層均為動態數組,API 高度相似,但同步策略、擴容機制、使用模式差異顯著。從四大維度深度對比,助你精準選型。
《Java 編程語言》作者指出:兩者為相容設計,API 大體一致,細節有差(如 Vector 保留 capacityIncrement、elementAt 等歷史方法)。
synchronized,線程安全,但單線程場景白白消耗鎖開銷Collections.synchronizedList、CopyOnWriteArrayList 或並發包| 集合 | 默認初始容量 | 擴容倍數 | 可配置增量 |
|---|---|---|---|
| Vector | 10 | 2倍(capacityIncrement=0 時) | 支持 capacityIncrement |
| ArrayList | 10 | 1.5倍 | 不支持 |
原理:擴容涉及數組複製,頻繁擴容殺效能。最佳實踐:預估數據量,構造時指定初始容量。
LinkedList(增刪 O(1),查詢 O(i)),但每節點額外對象增加 GC 壓力性能敏感、長度固定/可預估場景,T[] 避開同步、方法調用、擴容調整一切開銷,為程式「量身定做」最高效集合。