亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

java中ArrayList和LinkedList的區別詳解

瀏覽:4日期:2022-08-18 11:45:24
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擴容的第一步,第二步就沒啥說的了,就是把需要添加的元素添加到數組的最后一位

以上就是java中ArrayList和LinkedList的區別詳解的詳細內容,更多關于java ArrayList和LinkedList的區別的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 色老头xxxwww作爱视频 | 亚洲欧美日韩精品永久在线 | 日韩1区2区3区 | 国产三级a三级三级天天 | 日本黄色不卡视频 | 成人亚洲欧美日韩在线 | 欧美日韩亚洲一区二区三区在线观看 | 欧美成人片在线 | 午夜在线观看视频免费 成人 | 国产麻豆免费视频 | 亚洲欧美另类自拍第一页 | 深夜欧美福利视频在线观看 | 中文字幕亚洲不卡在线亚瑟 | 北岛玲日韩精品一区二区三区 | 久久精品嫩草影院免费看 | 国产精品久久网 | 日产一区二区三区精品视频 | 观看麻豆影视文化有限公司 | 小泽玛利亚一区二区在线看 | 久久99精品久久久久久黑人 | 久久精品这里有 | 久久亚洲这里只有精品18 | 播放欧亚一级特黄录像 | 国产在线一区观看 | 日本人与黑人xxxx | 国产性videostv另类极品 | 亚洲国产精品网 | 国产日韩在线观看视频网站 | 国产精品久久国产精品99 gif | 欧美一级日本一级韩国一级 | 手机免费黄色网址 | 免费视频网站在线观看黄 | 欧美成人另类人妖 | 免费观看日本高清a毛片 | 亚洲小视频 | 国产网站在线免费观看 | 免费国产草莓视频在线观看黄 | 欧美成人免费一级人片 | 伊人久久精品一区二区三区 | 亚洲美女色视频 | 久久99精品久久久久久秒播 |