java中List、ArrayList、LinkedList的區別

     List接口是Collection的子接口,用於定義線性表數據結構。可以將List理解爲存放對象的數組,只不過其元素個數可以動態的增加或減少。

    該集合的特點:元素可重複,並且有序,允許以下標的形式操作元素。

    List接口的兩個常見實現類爲ArrayList和LinkedList,分別用動態數組和鏈表的方式實現了List接口。

ArrayList和LinkedList的大致區別如下:
    1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
    2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因爲LinkedList要移動指針。 
    3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因爲ArrayList要移動數據。

    ArrayList內部是使用可増長數組實現的,所以是用get和set方法是花費常數時間的,但是如果插入元素和刪除元素,除非插入和刪除的位置都在表末尾,否則代碼開銷會很大,因爲裏面需要數組的移動。

    LinkedList是使用雙鏈表實現的,所以get會非常消耗資源,除非位置離頭部很近。但是插入和刪除元素花費常數時間。


ArrayList

1.ArrayList底層採用數組實現使用帶參數構造ArrayList象實際底層度10 Object類型數組
2.增加元素數超10ArrayList底層新數組度原數組1.5倍+1原數組內容複製新數組並且續增加內容都放新數組新數組容納增加元素重複該程
3.於ArrayList元素刪除操作需要刪除元素續元素向前移代價比較高
4.集合能放置象引用放置原數據類型我需要使用原數據類型包裝類才能加入集合 
5.集合放置都Object類型取Object類型必須要使用強制類型轉換其轉換真類型(放置進類型)


LinkedList

然而數組和數組列表都有一個重大的缺陷,這就是從數組的中間位置刪除一個元素需要付出很大的代價,其原因是數組中處於被刪除元素之後的所有元素都要向數組的前端移動。在數組的中間的位置插入一個元素也是如此。如下圖:

 

這個問題就靠LinkedList(鏈表)來解決。鏈表將每個對象存放在獨立的節點中,每個節點還存放着序列中上一個節點的引用和下一個節點的引用,如下圖:

這樣,從鏈表中間刪除一個元素是很輕鬆的操作,即需要對唄刪除元素附近的節點更新一下即可,如下圖:

 


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