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

Vector、ArrayList、LinkedList的區別

 

 

Vector、ArrayList、LinkedList實現的都是List,即有序集合。

Vector,是Java早期的執行緒安全的動態陣列。預設建立大小為10的Object陣列,將capacityIncrement設定為0,在插入的時候,如果陣列大小不夠,當capacityIncrement>0的時候,會將陣列擴大到size+capacityIncrement。當capacityIncrement<0的時候,會將陣列擴大為現有的2倍。

ArrayList是是一個動態陣列實現,不是執行緒安全的,所以效能會比Vector好。在擴容的時候則增加50%.擴容時呼叫System.arraycopy()方法進行大量的陣列複製,在刪除的時候不會減少陣列的大小,如果要縮小的話用trimToSize方法,

LinkedList是Java提供雙向連結串列,不需要像上面兩個擴容,也不是執行緒安全的。在插入元素的時候,必須新建立一個Entry物件,更新元素的前後引用。

Vector、ArrayList是動態陣列,內部元素以陣列的形式去順序儲存的,比較適合隨機訪問的場合,除了尾部插入和刪除元素,其他的效能會比較差,如果我們在中間位置需要插入一個元素,則需要將後面的元素依次後移,而LinkedList則是進行節點插入刪除效率高,隨機訪問效能比前兩者低。

Arrays.sort()裡底層用的排序演算法,資料集的不同,演算法不同。當資料集<47的時候用的是插入排序,當47<資料集<286的時候用的是雙軸快排,當資料集>286的時候用的是歸併排序。如果是物件資料型別則用的是TimeSort演算法,是歸併排序的優化版本。

Java8的時候引入了並行排序演算法,充分利用了現代核心處理器,底層基於fork-join框架,當處理器處理百萬資料的時候,處理速度會加快。