ArrayList,Vector和LinkList的區別

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較爲安全

相關文章
相關標籤/搜索