1. 程式人生 > >LinkedList和ArrayList異同點

LinkedList和ArrayList異同點

LinkedListArrayList的異同點:

相同點:

1 .他們都是執行緒不安全的,只在單執行緒下適合使用. arrayList在多執行緒環境下可以考慮使用.Collections.synchronizedList(list)函式返回一個執行緒安全的ArrayList.也可以使用concurrent併發包下的CopyOnWriteArrayList.

2. LinkedListArrayList都實現了Serializable介面,因此他支援序列化,能夠通過序列化傳輸,實現了Cloneable介面,能被克隆.  同時ArrayList還實現了RandomAccess介面,支援快速隨機訪問

,實際上就是通過下標序號進行快速訪問

3. 在查詢給定元素索引值等的方法中,原始碼都將該元素的值分為null和不為null兩種情況處理,ArrayList中允許元素為null

在查詢和刪除某元素時,原始碼中都劃分為該元素為null和不為null兩種情況來處理,LinkedList中允許元素為null.

區別:

 1. LinkedList是基於雙向連結串列實現的,除了可以當做連結串列來操作外,他還可以當做棧.佇列或雙端佇列在使用.並且在頭結點不存放資料.

       ArrayList是基於陣列實現的,是一個動態陣列,其容量能夠自動增長,類似於C語言中的動態申請記憶體,動態增長記憶體

.

   2 . ArrayList基於陣列實現,可以通過下標索引直接查詢到指定位置的元素,因此查詢效率高,但每次插入或刪除元素,就要大量的移動元素,插入刪除元素的效率低 .

   LinkedList是基於連結串列實現的,因此插入刪除效率高,查詢效率低(雖然有一個加速的動作).

加速原理:

原始碼中有一個 Entry<E> entry(int index)方法,該方法返回雙向連結串列中指定位置的結點,而連結串列中是沒有下標索引

,要指定位置出的元素,就要遍歷該連結串列,從原始碼的實現中,我們看到的這裡有一個加速動作,原始碼中先將 index與長度size 的一般比較

,如果 index<size/2,就只從位置0往後遍歷到index,而如果index>size/2 ,就只從位置size往前遍歷到位置index .這樣可以減少一部分不要的遍歷 .從而提高一定的效率(實際上效率還是很低的) .

     3. LinkedList是基於連結串列實現的,因此不存在容量不足的問題,所以這裡沒有擴容的方法.

   ArrayList有三個不同的構造方法,

無引數構造方法構造的ArrayList的容量預設為10,

帶有int型別的initialCapacity(初始容量)引數的構造方法,將當前容量值設為元素實際個數

帶有Collection引數的構造方法,Collection轉為陣列賦給ArrayList的實現陣列elementData.

ArrayList在每次增加元素時,都要呼叫擴充容量的方法 ensureCapacity來確保足夠的容量.當容量不足以容納當前的元素個數時,就設定新的容量為舊的容量的1.5倍加1 ,如果設定後的容量還不夠, 直接將新容量設定為傳入的引數(也就是所需的容量),而後用Arrays.copyof()方法將元素拷貝到新的陣列.這個方法非常的耗時,所以如果我們在實現能確定元素數量的情況下,才使用ArrayList,否則建議使用LinkedList.

轉載請標明出處

相關推薦

LinkedListArrayList異同

LinkedList和ArrayList的異同點: 相同點: 1 .他們都是執行緒不安全的,只在單執行緒下適合使用. arrayList在多執行緒環境下可以考慮使用.Collections.synchronizedList(list)函式返回一個執行緒安全的ArrayLis

LinkedListArrayList異同

LinkedList定義:List介面的連結串列實現,並提供了一些佇列,棧,雙端佇列操作的方法;特點:1、分配記憶體空間不是必須是連續的;          2、插入、刪除操作很快,只要修改前後指標就OK了;          3、訪問比較慢,必須得從第一個元素開始遍歷;Ar

LinkedListArrayList區別

else array RR for 數組下標 遍歷 如果 ring arraylist  查詢 LinkedList查詢用的遍歷,AyyayList查詢用的是數組下標,所以對於查詢ArrayList性能高於LinkedList 新增 新增在末尾或者中

LinkedListArrayList的區別(補充)

LinkedList和ArrayList的區別 1、ArrayList繼承於 AbstractList, LinkedList繼承於 AbstractSequentialList;2、ArrayList基於動態陣列的資料結構, LinkedList基於雙向連結串列。

python setfrozenset 異同學習記錄

    今天接觸到set和frozenset的同時使用,之前對於二者的瞭解僅僅是停留在set是可變集合,frozenset是不可變集合,其他的也就沒有再記住什麼了,今天找時間簡單地來總結一下它們的異同點,也方便以後的學習和使用,下面是具體的實踐,具體的區別講解都在註釋中,就不再多

6.linkedlistarraylist的區別

ArrayList和LinkedList的大致區別如下: 1.ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構。  2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。

LinkedListArrayList之間互相轉換

ArrayList與類LinkedList不能強制資料型別轉換。 1.通過構造方法轉換 ArrayList arrayList = new ArrayList(); LinkedList linkedList = new LinkedList(arrayList); L

linkedlistarraylist底層實現,linkedlist的內部構造

我當然不是第一個發現的,網上也有很多人寫過測試的demo,我也自己寫過,同時往ArrayList和LinkedList塞入上萬個元素,然後在指定位置連續插入元素(迴圈次數越大越明顯)。 指定位置從頭部開始逐步後移,可以明顯的看到,ArrayList消耗的時間越來越短成線形越來越短(符合前面提到的,插入位置越靠

LinkedListArrayList在尾部插入資料效率對比

做這個實驗之前,我的猜想的是:因為每次都是在尾部插入資料,而LinkedLiist裡面有一個last指標一直指向最後一個元素,而ArrayList則根據索引來找到最後一個元素,那麼,這兩個方式中,效率應該是差不多的; 但是實驗結果卻不是這樣的; 先看程式碼: packa

List、Map、Set的理解(LinkedListArrayList、VectorArrayList、HashMapHashTableHashSet區別與使用)

List特點:元素有放入順序,元素可重複 Map特點:元素按鍵值對儲存,無放入順序 Set特點:元素無放入順序,元素不可重複(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的) List介面有三

介紹關於ArrayListLinkedList並闡述它們的異同

ArrayList和LinkedList都是我們常用的集合實現類,下面就介紹一下它們的特點以及它們的區別 ArrayList ArrayList繼承自AbstractList類,實現了 List 介面。底層基於陣列實現容量大小動態變化。它是非執行緒安全的,一般多用於單執行

Java進階(四十六)簡述ArrayList、Vector與LinkedList異同

簡述ArrayList、Vector與LinkedList的異同點   Collection類的繼承圖如下:   從圖中可以看出,LinkedList與ArrayList、ArrayDeque這三者都實現了List介面.所有使用方式也很相似,主要區別在於

ArrayListLinkedListVector三者的異同

List子介面:儲存有序的、可重複的資料----->“動態”陣列,注意:此處不是真正的動態陣列     **ArrayList:作為List的主要實現類;主要特點有執行緒不安全,但是執行效率高效,底層實現是陣列結構(Collections中定義了synch

python字典中dict.get()dict.setdefault()的異同

def clas 即使 實例 字典 default 增加 存在 none 相同點: 兩者是參數相同:dict.get(key, default=None), dict.setdefault(key, default=None) 如果指定的鍵不存在時,兩者都返回默認值,默認

抽象類(abstract)接口(interface)的異同

必須 spa 1.8 fin 存在 stat ace 矛盾 系統架構 接口是抽象類的延伸,是抽象類的特殊化 相同點:   都可以寫抽象方法,規定了子類必須要重寫的方法(所以不能有抽象構造方法和抽象靜態方法);       為什麽不能有抽象構造方法:構造方法是類實例化時的構造

letconst在es6中的異同

http 而是 alt 技術 代碼 不存在 暫時 存在 把他 let和const這兩個都是聲明一個變量或函數的方法與var差不太多的效果 let的聲明在for循環中,當你定義的是多少,最後你的值就是多少開始的,它只進行一次循環,不會像var那樣去一遍一遍的去遍歷它 並且l

影象函式 imagecreatetruecolor()imagecreate()的異同

共同點:這兩個函式都是用於建立畫布 區別: 1.不同的是建立畫布和為畫布填充顏色的流程不一樣; 用imagecreatetruecolor(int x,int y)建立的是一幅大小為 x和 y的影象(預設為黑色),如想改變背景顏色則需要為畫布分配顏色imagecolorallcollate(resour

ArrayList,LinkedListString

import java.util.ArrayList; public class Demo{ public static void main(String[] args) throws Exception { ArrayList<Integer> arrayLi

LinkedListArrayList異同

        LinkedList是一個底層為連結串列的類,LinkedList繼承AbstractSequentialList,與ArrayList一樣實現AbstractList介面。LinkedList類具有 size(資料個數),node:prio&

javascript陣列java陣列的異同

什麼是陣列呢?在java中是這麼定義的:陣列是相同型別或者是相相容型別的資料集合。   javascript的陣列也和java中的陣列差不多。但是因為javascript是弱型別語言,所以是不管什麼型別都可以放入同一個數組裡。 一:javascript裡的陣列 陣列的定義