LinkedList和ArrayList的區別(補充)
阿新 • • 發佈:2018-11-01
LinkedList和ArrayList的區別
8、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。
當ArrayList擴容時,會自動生成一個新的array(長度是之前的1.5倍),再將舊的array移值上去,耗時是O(n)。
9、ArrayList的get操作快一些,而add操作,若add的位置為List中間,肯定是LinkedList要快一些,尾部的話兩者差不多。具體使用哪個需要分場景選擇最合適的。
每天努力一點,每天都在進步。