1. 程式人生 > >LinkedList和ArrayList的區別(補充)

LinkedList和ArrayList的區別(補充)

LinkedList和ArrayList的區別

1、ArrayList繼承於 AbstractList, LinkedList繼承於 AbstractSequentialList;

2、ArrayList基於動態陣列的資料結構, LinkedList基於雙向連結串列。

對於隨機訪問, ArrayList比較佔優勢,LinkedList插入、刪除元素比較快,如果只要調整指標的指向那麼時間複雜度是O(1),但是如果針對特定位置需要遍歷時,時間複雜度是O(n),也就是LinkedList在隨機訪問元素的話比較慢;

3、LinkedList沒有實現自己的 Iterator,但是有 ListIterator和 DescendingIterator;

4、LinkedList需要更多的記憶體,因為 ArrayList的每個索引的位置是實際的資料,而 LinkedList中的每個節點中儲存的是實際的資料和前後節點的位置;

5、ArrayList 和 LinkedList都是非同步的集合。

6、和ArrayList一樣,LinkedList也是非執行緒安全的,只有在單執行緒下才可以使用。

為了防止非同步訪問,可以採用如下方式建立LinkedList:List list= Collections.synchronizedList(new LinkedList());

7、LinkedList基於雙向連結串列實現,元素都可以為null。

8、LinkedList 是基於連結串列的,因此不像ArrayList需要擴容機制。

當ArrayList擴容時,會自動生成一個新的array(長度是之前的1.5倍),再將舊的array移值上去,耗時是O(n)。

9、ArrayList的get操作快一些,而add操作,若add的位置為List中間,肯定是LinkedList要快一些,尾部的話兩者差不多。具體使用哪個需要分場景選擇最合適的。




每天努力一點,每天都在進步。