LinkedList和ArrayList異同點
LinkedList和ArrayList的異同點:
相同點:
1 .他們都是執行緒不安全的,只在單執行緒下適合使用. arrayList在多執行緒環境下可以考慮使用.Collections.synchronizedList(list)函式返回一個執行緒安全的ArrayList類.也可以使用concurrent併發包下的CopyOnWriteArrayList類.
2. LinkedList和ArrayList都實現了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 的一般比較
3. LinkedList是基於連結串列實現的,因此不存在容量不足的問題,所以這裡沒有擴容的方法.
ArrayList有三個不同的構造方法,
無引數構造方法構造的ArrayList的容量預設為10,
帶有int型別的initialCapacity(初始容量)引數的構造方法,將當前容量值設為元素實際個數
帶有Collection引數的構造方法,將Collection轉為陣列賦給ArrayList的實現陣列elementData.
在ArrayList在每次增加元素時,都要呼叫擴充容量的方法 ensureCapacity來確保足夠的容量.當容量不足以容納當前的元素個數時,就設定新的容量為舊的容量的1.5倍加1 ,如果設定後的容量還不夠, 直接將新容量設定為傳入的引數(也就是所需的容量),而後用Arrays.copyof()方法將元素拷貝到新的陣列.這個方法非常的耗時,所以如果我們在實現能確定元素數量的情況下,才使用ArrayList,否則建議使用LinkedList.
轉載請標明出處
相關推薦
LinkedList和ArrayList異同點
LinkedList和ArrayList的異同點: 相同點: 1 .他們都是執行緒不安全的,只在單執行緒下適合使用. arrayList在多執行緒環境下可以考慮使用.Collections.synchronizedList(list)函式返回一個執行緒安全的ArrayLis
LinkedList和ArrayList異同
LinkedList定義:List介面的連結串列實現,並提供了一些佇列,棧,雙端佇列操作的方法;特點:1、分配記憶體空間不是必須是連續的; 2、插入、刪除操作很快,只要修改前後指標就OK了; 3、訪問比較慢,必須得從第一個元素開始遍歷;Ar
LinkedList和ArrayList區別
else array RR for 數組下標 遍歷 如果 ring arraylist 查詢 LinkedList查詢用的遍歷,AyyayList查詢用的是數組下標,所以對於查詢ArrayList性能高於LinkedList 新增 新增在末尾或者中
LinkedList和ArrayList的區別(補充)
LinkedList和ArrayList的區別 1、ArrayList繼承於 AbstractList, LinkedList繼承於 AbstractSequentialList;2、ArrayList基於動態陣列的資料結構, LinkedList基於雙向連結串列。
python set和frozenset 異同點學習記錄
今天接觸到set和frozenset的同時使用,之前對於二者的瞭解僅僅是停留在set是可變集合,frozenset是不可變集合,其他的也就沒有再記住什麼了,今天找時間簡單地來總結一下它們的異同點,也方便以後的學習和使用,下面是具體的實踐,具體的區別講解都在註釋中,就不再多
6.linkedlist和arraylist的區別
ArrayList和LinkedList的大致區別如下: 1.ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構。 2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。
LinkedList和ArrayList之間互相轉換
ArrayList與類LinkedList不能強制資料型別轉換。 1.通過構造方法轉換 ArrayList arrayList = new ArrayList(); LinkedList linkedList = new LinkedList(arrayList); L
linkedlist和arraylist底層實現,linkedlist的內部構造
我當然不是第一個發現的,網上也有很多人寫過測試的demo,我也自己寫過,同時往ArrayList和LinkedList塞入上萬個元素,然後在指定位置連續插入元素(迴圈次數越大越明顯)。 指定位置從頭部開始逐步後移,可以明顯的看到,ArrayList消耗的時間越來越短成線形越來越短(符合前面提到的,插入位置越靠
LinkedList和ArrayList在尾部插入資料效率對比
做這個實驗之前,我的猜想的是:因為每次都是在尾部插入資料,而LinkedLiist裡面有一個last指標一直指向最後一個元素,而ArrayList則根據索引來找到最後一個元素,那麼,這兩個方式中,效率應該是差不多的; 但是實驗結果卻不是這樣的; 先看程式碼: packa
List、Map、Set的理解(LinkedList和ArrayList、Vector和ArrayList、HashMap和HashTable和HashSet區別與使用)
List特點:元素有放入順序,元素可重複 Map特點:元素按鍵值對儲存,無放入順序 Set特點:元素無放入順序,元素不可重複(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的) List介面有三
介紹關於ArrayList和LinkedList並闡述它們的異同點
ArrayList和LinkedList都是我們常用的集合實現類,下面就介紹一下它們的特點以及它們的區別 ArrayList ArrayList繼承自AbstractList類,實現了 List 介面。底層基於陣列實現容量大小動態變化。它是非執行緒安全的,一般多用於單執行
Java進階(四十六)簡述ArrayList、Vector與LinkedList的異同點
簡述ArrayList、Vector與LinkedList的異同點 Collection類的繼承圖如下: 從圖中可以看出,LinkedList與ArrayList、ArrayDeque這三者都實現了List介面.所有使用方式也很相似,主要區別在於
ArrayList、LinkedList和Vector三者的異同
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 矛盾 系統架構 接口是抽象類的延伸,是抽象類的特殊化 相同點: 都可以寫抽象方法,規定了子類必須要重寫的方法(所以不能有抽象構造方法和抽象靜態方法); 為什麽不能有抽象構造方法:構造方法是類實例化時的構造
let和const在es6中的異同點
http 而是 alt 技術 代碼 不存在 暫時 存在 把他 let和const這兩個都是聲明一個變量或函數的方法與var差不太多的效果 let的聲明在for循環中,當你定義的是多少,最後你的值就是多少開始的,它只進行一次循環,不會像var那樣去一遍一遍的去遍歷它 並且l
影象函式 imagecreatetruecolor()和imagecreate()的異同點
共同點:這兩個函式都是用於建立畫布 區別: 1.不同的是建立畫布和為畫布填充顏色的流程不一樣; 用imagecreatetruecolor(int x,int y)建立的是一幅大小為 x和 y的影象(預設為黑色),如想改變背景顏色則需要為畫布分配顏色imagecolorallcollate(resour
ArrayList,LinkedList和String
import java.util.ArrayList; public class Demo{ public static void main(String[] args) throws Exception { ArrayList<Integer> arrayLi
LinkedList與ArrayList的異同
LinkedList是一個底層為連結串列的類,LinkedList繼承AbstractSequentialList,與ArrayList一樣實現AbstractList介面。LinkedList類具有 size(資料個數),node:prio&
javascript陣列和java陣列的異同點
什麼是陣列呢?在java中是這麼定義的:陣列是相同型別或者是相相容型別的資料集合。 javascript的陣列也和java中的陣列差不多。但是因為javascript是弱型別語言,所以是不管什麼型別都可以放入同一個數組裡。 一:javascript裡的陣列 陣列的定義