91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ArrayList與LinkedList在java中的區別是什么

發布時間:2021-01-18 15:08:17 來源:億速云 閱讀:158 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關ArrayList與LinkedList在java中的區別是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

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

1、ArrayList是基于索引的數據接口,它的底層是數組。它可以以O(1)時間復雜度對元素進行隨機訪問。與此對應,LinkedList是以元素列表的形式存儲它的數據,每一個元素都和它的前一個和后一個元素鏈接在一起,在這種情況下,查找某個元素的時間復雜度是O(n)。
2、相對于ArrayList,LinkedList的插入,添加,刪除操作速度更快,因為當元素被添加到集合任意位置的時候,不需要像數組那樣重新計算大小或者是更新索引。
3、LinkedList比ArrayList更占內存,因為LinkedList為每一個節點存儲了兩個引用,一個指向前一個元素,一個指向下一個元素。

ArrayList擴容:

總的來說就是分兩步:

1、擴容

把原來的數組復制到另一個內存空間更大的數組中

2、添加元素

把新元素添加到擴容以后的數組中
無參構造:

public ArrayList() {
  this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

帶參構造:

public ArrayList(int initialCapacity) {
  if (initialCapacity >0) {
    this.elementData =new Object[initialCapacity];
  }else if (initialCapacity ==0) {
    this.elementData = EMPTY_ELEMENTDATA;
  }else {
    throw new IllegalArgumentException("Illegal Capacity: "+
                      initialCapacity);
  }
}

在無參構造中,我們看到了在用無參構造來創建對象的時候其實就是創建了一個空數組,長度為0
在有參構造中,傳入的參數是正整數就按照傳入的參數來確定創建數組的大小,否則異常
接下來我們來看擴容,擴容的方法就是 add(E e)

public boolean add(E e) {
    ensureCapacityInternal(size + 1); // Increments modCount!!
    elementData[size++] = e;
    return true;
  }
private void ensureCapacityInternal(int minCapacity) {
    ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
  }
private static int calculateCapacity(Object[] elementData, int minCapacity) {
    if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
      return Math.max(DEFAULT_CAPACITY, minCapacity);
    }
    return minCapacity;
  }
private void ensureExplicitCapacity(int minCapacity) {
   modCount++;

   // overflow-conscious code
   if (minCapacity - elementData.length > 0)
     grow(minCapacity);
 }
private void grow(int minCapacity) {
   // overflow-conscious code
   int oldCapacity = elementData.length;
   int newCapacity = oldCapacity + (oldCapacity >> 1);
   if (newCapacity - minCapacity < 0)
     newCapacity = minCapacity;
   if (newCapacity - MAX_ARRAY_SIZE > 0)
     newCapacity = hugeCapacity(minCapacity);
   // minCapacity is usually close to size, so this is a win:
   elementData = Arrays.copyOf(elementData, newCapacity);
 }

int newCapacity = oldCapacity + (oldCapacity >> 1);
oldCapacity >> 1 右移運算符 原來長度的一半 再加上原長度也就是每次擴容是原來的1.5倍
之前的所有都是確定新數組的長度,確定之后就是把老數組copy到新數組中,這樣數組的擴容就結束了
以上的一切都是ArrayList擴容的第一步,第二步就沒啥說的了,就是把需要添加的元素添加到數組的最后一位

看完上述內容,你們對ArrayList與LinkedList在java中的區別是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长垣县| 武乡县| 济源市| 泰来县| 富源县| 自贡市| 清流县| 句容市| 万全县| 德令哈市| 和龙市| 中宁县| 偃师市| 泽州县| 马边| 桐庐县| 澎湖县| 武隆县| 垣曲县| 元谋县| 壶关县| 新沂市| 大渡口区| 通化县| 伊金霍洛旗| 宁津县| 马山县| 潞西市| 麦盖提县| 吉安县| 兴安盟| 讷河市| 新宾| 南川市| 宁明县| 永定县| 永丰县| 浪卡子县| 饶平县| 六安市| 兴义市|