1. 程式人生 > >ArrayList、vector、LinkedList的區別及 內部容器的擴充

ArrayList、vector、LinkedList的區別及 內部容器的擴充

ArrayList 和Vector是採用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,都允許直接序號索引元素,但是插入資料要設計到陣列元素移動等記憶體操作,所以索引資料快插入資料慢,Vector由於使用了synchronized方法(執行緒安全)所以效能上比ArrayList要差,LinkedList使用雙向連結串列實現儲存,按序號索引資料需要進行向前或向後遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入數度較快! 可以這樣說:當操作是在一列資料的後面新增資料而不是在前面或中間,並且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的效能;當你的操作是在一列資料的前面或中間新增或刪除資料,並且按照順序訪問其中的元素時,就應該使用LinkedList了。
總結 ArrayList和LinkedList在效能上各有優缺點,都有各自所適用的地方,總的說來可以描述如下:  1.對ArrayList和LinkedList而言,在列表末尾增加一個元素所花的開銷都是固定的。對ArrayList而言,主要是在內部陣列中增加一項,指向所新增的元素,偶爾可能會導致對陣列重新進行分配;而對LinkedList而言,這個開銷是統一的,分配一個內部Entry物件。 2.在ArrayList的中間插入或刪除一個元素意味著這個列表中剩餘的元素都會被移動;而在LinkedList的中間插入或刪除一個元素的開銷是固定的。 3.LinkedList不支援高效的隨機元素訪問。
4.ArrayList的空間浪費主要體現在在list列表的結尾預留一定的容量空間,而LinkedList的空間花費則體現在它的每一個元素都需要消耗相當的空間
ArrayList 和 Vector的區別:     這兩個類都實現了List介面他們都是有序集合,及儲存在這兩個集合中的元素位置都是有順序的,相當於 一種動態的陣列,我們以後可以按位置索引號取出某個元素,並且其中的資料是允許重複的。
    1、同步性:
    Vector是執行緒安全的,也就是說它的方法之間是執行緒同步的,而ArrayList是執行緒不安全的,它的方法之間不同步的。如果只有一個執行緒會訪問到集合,那最好是使用ArrayList因為它不考慮執行緒安全,效率高。如果有多個執行緒會訪問到集合,那最好是使用Vector,因為不需要我們自己再去考慮和編寫執行緒安全的程式碼。     2、資料增長:
    ArrayList 與Vector 都有一個初始的容量大小,當儲存進他們裡面的元素個數超過了容量時,就需要增加ArrayList與Vector的儲存空間, 每次要增加儲存空間時,不是隻增加一個儲存單元,而是增加多個儲存單元,每次增加的儲存單元的個數在記憶體空間利用與程式效率之間要取的一定的平衡。Vector預設增加為原來的兩倍,而ArrayList預設為 1.5倍,ArrayList和Vector都可以設定初始的空間大小,Vector還可以設定增長的空間大小,而Arraylist 沒有設定增長空間的方法。 及Vector增長原來的1倍,Arraylist增長原來的0.5倍