ArrayList、Vector和LinkedList類均在java.util包下java
ArrayList和Vector都是基於存儲元素的Object[] array來實現的,它們會在內存中開闢一塊連續的空間安全
來存儲,由於數據存儲是連續的,因此它們支持用下標來訪問元素,索引數據的速度比較快。多線程
1)ArrayList和Vector都有一個初始化的容量大小,當裏面存儲的元素超過初始的大小時就須要動態地擴充性能
它們的存儲空間,Vector默認擴充爲原來的兩倍(每次擴充空間的大小能夠設置),ArrayList默認spa
擴充爲原來的1.5倍(沒有提供方法來設置空間擴充的方法)。線程
2)ArrayList和Vector最大的區別就是synchronization的使用,沒有一個ArrayList的方法是同步的,而code
Vector的絕大多數方法(如add,insert,remove,set,equals,hashcode)都是直接或間接同步的,因此Vector索引
是線程安全的,ArrayList不是線程安全的。正是因爲Vector提供了線程安全的機制,其性能上也要稍遜於ArrayList內存
LinkedList是採用雙向列表來實現的,對數據的索引須要從列表頭開始遍歷,所以用於隨機訪問則效率比較低,rem
可是插入元素時不須要對數據進行移動,所以插入效率較高。同時,LinkedList是非線程安全的容器
對容器的選擇:
當對數據的主要操做是索引或只在集合的末端增長、刪除元素時,使用ArrayList或Vector效率比較高,
當對數據的操做主要爲指定位置或刪除操做時,使用LikedList效率比較高;當在多線程中使用容器時,
選用Vector較爲安全