聯繫:
ArrayList、Vector、LinkedList類均在java.util包中,都爲List接口的子類。
區別:
- 結構上:ArrayList、Vector基於數組實現,LinkedList基於雙向鏈表實現。
ArrayList | Vector | |
---|---|---|
初始化策略 | 採用懶加載策略,第一次add時才初始化內部數組,默認初始化大小爲10。 | 產生對象時就初始化內部數組,默認大小爲10。 |
擴容策略 | 擴容爲原數組的1.5倍 | 擴容爲原數組的2倍 |
線程安全問題 | 採用異步處理線程不安全,性能較高 | 採用synchronized修飾增刪查改方法,線程安全,性能較低(鎖粒度太粗,將當前集合對象鎖住,讀讀互斥) |
其他 | JDK內置的Stack是Vector的子類 | |
使用場景 | 在大部分場合都是適合使用的,常適用於頻繁查找、在集合末端插入與刪除元素 | 不建議使用 |
- LinkedList採用異步處理,線程不安全,頻繁在任意位置的插入與刪除考慮使用,LinkedList是Queue接口的常用子類。