ArrayList LinkedList 區別

回答該題的思路:數據數據結構----->增刪改查的操作區別[涉及到源碼了]----->線程安全等方面------->然後回答使用時如何選擇其一。

答:ArrayList:底層是由動態數組組成。LinkedList:底層是雙向列表構成,每一個節點(頭尾節點除外)都有指向前一個節點,和下一個節點的引用。

add方法:

uploading.4e448015.gif正在上傳…重新上傳取消uploading.4e448015.gif正在上傳…重新上傳取消uploading.4e448015.gif正在上傳…重新上傳取消

 

 

先判斷index是否合法,如果有index的話,然後擴容,ensureCapactiyInternal函數裏就完成了一新數組大小的確定,然後將原數據Arrays.copyOf 到新數組,然後將插入的新數據放入到新數組裏面。

LinkedList:現根據索引找到該索引的節點A,獲取他前一個節點B,構建新的元素C,C節點的前一個節點指向B,B的下一個節點指向C,C的下一個節點指向B,B的前一個節點指向C

 

remove():

 

先找到賦值到oidValue ,然後將index後面的元素向前移動一個位置。【arrayCopy的方式】LinkedList:先通過二分法找到該節點(Node(index)方法),然後找到該節點的前一個節點A和後一個節點B,將A節點的下一個節點的引用指向B,B的前一個節點的引用指向A完成刪除。

get():

ArrayList:根據數組下標直接獲取

LinkedList:現根據二分法(size>>1)判斷index所在的位置,然後遍歷(0到index或size-1到index)找到對應的節點

contain方法

ArrayList:遍歷數組,判斷是否有元素等於指定的元素

LinkedList:遍歷鏈表 找到是由有節點元素等於指定的元素

這兩個都是線程不安全的,https://blog.csdn.net/liyu121/article/details/87873858

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