ArrayList與LinkedList的比較

ArrayList 繼承AbstractList<E>,實現List、Cloneable和Serializable接口

LinkedList繼承AbstractSequentialList<E>,實現List、Cloneable和Serializable接口
 

元素存儲方式:

ArrayList 採用數組的方式存儲

LinkedList採用鏈表結構存儲

add:

  • 對於元素的add()來說,LinkedList要比ArrayList要快一些,因爲ArrayList可能需要額外的擴容操作,當然如果沒有擴容,二者沒有很大的差別
  • 對於元素的add(int, element),對於LinkedList來說,代價主要在遍歷獲取插入的位置的元素,而ArrayList的主要代價在於可能有額外的擴容和大量元素的移動
  • 小結:對於簡單的元素添加,如果事先知道元素的個數,採用預置大小的ArrayList要更好,反之可以考慮LinkedList

remove:

刪除操作中,LinkedList更有優勢,一旦找到了刪除的節點,它僅僅只是斷開鏈接關係,並沒有元素複製移動的行爲,而ArrayList不可避免的又要進行元素的移動。

遍歷:

按照索引遍歷,ArrayList是更好的選擇,按照Iterator遍歷,也許LinkedList會好一些。

反過來理解,如果是ArrayList,Iterator和index遍歷都可以,如果是LinkedList,優先選擇Iterator比較好。

其他

  • 對於ArrayList和LinkedList, size() isEmpty() 這些都是常量計算,代價很低
  • LinkedList實現了更多的方法,包括Queue,所以它也是一種隊列
  • 對於少量得元素臨時存儲,優先考慮ArrayList
  • 頻繁的添加和刪除操作的時候,優先使用LinkedList
  • 頻繁的按索引訪問遍歷,優先使用ArrayList

轉自:http://www.xeclipse.com/?p=1324

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章