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