1.arraylist是實現了基於動態陣列的資料結構,linkedlist基於鍊錶的資料結構。 (linkedlist是雙向鍊錶,有next也有previous)
2.對於隨機訪問get和set,arraylist覺得優於linkedlist,因為linkedlist要移動指標。
3.對於新增和刪除操作add和remove,linedlist比較佔優勢,因為arraylist要移動資料。
時間複雜度比較:
首先一點關鍵的是,arraylist的內部實現是基於基礎的物件陣列的,因此,它使用get方法訪問列表中的任意乙個元素時(random access),它的速度要比linkedlist快(o1)。linkedlist中的get方法是按照順序從列表的一端開始檢查,直到另外一端(on)。對linkedlist而言,訪問列表中的某個指定元素沒有更快的方法了
但在某些情況下linkedlist的表現要優於arraylist,有些演算法在linkedlist中實現時效率更高。比方說,利用collections.reverse方法對列表進行反轉時,其效能就要好些。當要對list進行大量的插入和刪除操作時,linkedlist也是乙個較好的選擇。
三.總結
arraylist和linkedlist在效能上各有優缺點,都有各自所適用的地方,總的說來可以描述如下:
1.對arraylist和linkedlist而言,在列表末尾增加乙個元素所花的開銷都是固定的。對arraylist而言,主要是在內部陣列中增加一項,指向所新增的元素,偶爾可能會導致對陣列重新進行分配;而對linkedlist而言,這個開銷是統一的,分配乙個內部entry物件。
2.在arraylist的中間插入或刪除乙個元素意味著這個列表中剩餘的元素都會被移動;而在linkedlist的中間插入或刪除乙個元素的開銷是固定的。
3.linkedlist不支援高效的隨機元素訪問。
4.arraylist的空間浪費主要體現在在list列表的結尾預留一定的容量空間,而linkedlist的空間花費則體現在它的每乙個元素都需要消耗相當的空間
可以這樣說:當操作是在一列資料的後面新增資料而不是在前面或中間,並且需要隨機地訪問其中的元素時,使用arraylist會提供比較好的效能;當你的操作是在一列資料的前面或中間新增或刪除資料,並且按照順序訪問其中的元素時,就應該使用linkedlist了
Array List和ArrayList的區別與
定義 public abstract class array icloneable,ilist,icollection,ienumerable,istructuralcomparable,istructuraequatable 陣列在記憶體中是連續儲存的,所以它的索引速度是非常的快,而且賦值與修改元...
LinkedList和ArrayList的區別
對於集合collection下的list介面,有兩個實現類,arraylist和linkedlist,那麼他們兩個有什麼區別呢。arraylist的底層由陣列實現,而linkedlist的底層由雙向鍊錶實現,底層的不同才是他們區別的根源。然而因為他們繼承於同乙個父介面,他們的很多方法都是相同的。關於...
ArrayList和LinkedList的面試題
一 arraylist為什麼是執行緒不安全的?arraylist在新增乙個元素的時候,它可能會有兩步來完成 1.在 items size 的位置存放此元素 2.增大 size 的值。在單執行緒執行的情況下,如果 size 0,新增乙個元素後,此元素在位置 0,而且 size 1 而如果是在多執行緒情...