国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java中ArrayList和LinkedList的區(qū)別詳解

瀏覽:3日期:2022-08-18 11:45:24
ArrayList和LinkedList都實(shí)現(xiàn)了List接口,有以下的不同點(diǎn):

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

ArrayList擴(kuò)容:

總的來(lái)說(shuō)就是分兩步:

1、擴(kuò)容

把原來(lái)的數(shù)組復(fù)制到另一個(gè)內(nèi)存空間更大的數(shù)組中

2、添加元素

把新元素添加到擴(kuò)容以后的數(shù)組中無(wú)參構(gòu)造:

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

帶參構(gòu)造:

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); }}

在無(wú)參構(gòu)造中,我們看到了在用無(wú)參構(gòu)造來(lái)創(chuàng)建對(duì)象的時(shí)候其實(shí)就是創(chuàng)建了一個(gè)空數(shù)組,長(zhǎng)度為0在有參構(gòu)造中,傳入的參數(shù)是正整數(shù)就按照傳入的參數(shù)來(lái)確定創(chuàng)建數(shù)組的大小,否則異常接下來(lái)我們來(lái)看擴(kuò)容,擴(kuò)容的方法就是 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 右移運(yùn)算符 原來(lái)長(zhǎng)度的一半 再加上原長(zhǎng)度也就是每次擴(kuò)容是原來(lái)的1.5倍之前的所有都是確定新數(shù)組的長(zhǎng)度,確定之后就是把老數(shù)組copy到新數(shù)組中,這樣數(shù)組的擴(kuò)容就結(jié)束了以上的一切都是ArrayList擴(kuò)容的第一步,第二步就沒(méi)啥說(shuō)的了,就是把需要添加的元素添加到數(shù)組的最后一位

以上就是java中ArrayList和LinkedList的區(qū)別詳解的詳細(xì)內(nèi)容,更多關(guān)于java ArrayList和LinkedList的區(qū)別的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 精品视频在线免费看 | 国产精品手机在线播放 | 久久免费精品一区二区 | 亚洲精品成人网久久久久久 | 男女精品视频 | 亚洲一区二区三区免费在线观看 | 女人一级特纯黄大片色 | 欧美日韩免费做爰视频 | 日本一级级特黄特色大片 | 黄色三级网站 | 国产特黄特色的大片观看免费视频 | 成人网18免费网 | 久草网视频在线 | 久久久久久久久久久久久久久久久 | 国产在线91精品天天更新 | 久久久久久91香蕉国产 | 日韩经典一区 | 免费亚洲视频 | 日韩免费精品一级毛片 | 日本不卡一区视频 | 深爱激情五月网 | 手机看片1024国产基地 | 国产自线一二三四2021 | 亚洲视频日韩 | 日韩福利视频精品专区 | 成人美女网 | 曰本一区| 毛片免费永久不卡视频观看 | 美女扒开腿让男人桶个爽 | 久草免费网站 | 亚洲不卡在线观看 | 久久精品国内偷自一区 | 亚洲日本韩国在线 | 精品久久久久不卡无毒 | 男人天堂网在线视频 | 国产综合在线观看 | 欧美孕妇性xxxⅹ精品hd | 日韩欧美中文字幕一区二区三区 | 99精品久久久久久久免费看蜜月 | 手机看片久久高清国产日韩 | heyzo国产亚洲高清 |