1. 程式人生 > >java中ArrayList、LinkedList和Vector的區別

java中ArrayList、LinkedList和Vector的區別

ArrayList、LinkedList和Vector都是實現了List介面。

其中,ArrayList和Vector底層是用陣列實現的,因此可以用序號下標來訪問他們,查詢的效率高,一般陣列的大小比要插入的資料大數量要大。

LinkedList的底層使用雙向連結串列實現的,因此插入和刪除的效率高。

在多執行緒併發的時候,ArrayList和LinkedList是非執行緒安全的,並且是不同步的。Vector的所有方法都用了synchronized方法,是執行緒安全的,但是vector中的方法組合起來使用不是執行緒安全的。

例如:

Vector vector = new Vector();

public void put(String element){

if (!vector.contains(element)) 
    vector.add(element); 
}

.....

}

我們是要實現在插入後,vector中沒有重複的元素。

上面的程式碼中,雖然contains()和add()都是執行緒安全的,但是假如有兩個執行緒a,b都要執行add(“”);在a執行了contains後還沒有執行add方法,這時執行緒b執行了contains方法,b發現此時vector中沒有重複的元素。因此vector中就會插入了重複的元素了,與我們要實現的功能不一致。因此,我們在組合使用vector中的方法的時候,還是要根據具體情況加上synchronized。