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