天天看點

經典回答:《ArrayList和LinkedList差別》Java面試沖擊月薪40K

作者:猿之生活

關注擷取最新面試集錦,月薪40K不是夢。

經典回答:《ArrayList和LinkedList差別》Java面試沖擊月薪40K

ArrayList:

基于動态數組、連續記憶體存儲、下标通路(随機通路)、擴充機制:當數組長度固定且超過長度存儲資料時,建立新數組,然後将舊數組中的資料複制到新數組中。如果不在尾部插入資料,則可以通過移動元素(向後複制一份,插入新元素)、使用尾部插值方法和指定初始容量來顯着提高。

經典回答:《ArrayList和LinkedList差別》Java面試沖擊月薪40K

LinkedList:

基于連結清單,可以存儲在分散的記憶體中,适合做資料插入及删除操作,不适合查詢:需要逐 一周遊 周遊LinkedList必須使用iterator不能使用for循環,因為每次for循環體内通過get(i)取得某一進制素時都需 要對list重新進行周遊,性能消耗極大。 另外不要試圖使用indexOf等傳回元素索引,并利用其進行周遊,使用indexlOf對list進行了周遊,當結 果為空時會周遊整個清單。

經典回答:《ArrayList和LinkedList差別》Java面試沖擊月薪40K

綜上

ArrayList和LinkedList都實作了List接口,有以下的不同點:

1.ArrayList是一個基于索引的資料接口,它的底層是一個數組。它可以随機通路具有O(1)時間複雜度的元素。與此對應,LinkedList以元素清單的形式存儲其資料,每個元素都與其前後的元素相連結。在這種情況下,查找一個元素的時間複雜度為O(n)。

2.與ArrayList相比,LinkedList的插入、添加和删除速度更快,因為當一個元素被添加到集合中的任意位置時,不需要像數組一樣重新計算大小或更新索引。

3.LinkedList比ArrayList占用更多記憶體,因為LinkedList為每個節點存儲兩個引用,一個指向上一個元素,另一個指向下一個元素。