最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Java的ArrayList數(shù)組自動(dòng)擴(kuò)容機(jī)制

 更新時(shí)間:2023年05月16日 10:52:07   作者:逆流°只是風(fēng)景-bjhxcc  
這篇文章主要介紹了關(guān)于Java的ArrayList數(shù)組自動(dòng)擴(kuò)容機(jī)制,ArrayList底層是基于數(shù)組實(shí)現(xiàn)的,是一個(gè)動(dòng)態(tài)數(shù)組,自動(dòng)擴(kuò)容,不是線程安全的,只能用在單線程環(huán)境下,需要的朋友可以參考下

ArrayList介紹

  • ArrayList底層是基于數(shù)組實(shí)現(xiàn)的,是一個(gè)動(dòng)態(tài)數(shù)組,自動(dòng)擴(kuò)容。
  • ArrayList不是線程安全的,只能用在單線程環(huán)境下。
  • 實(shí)現(xiàn)了Serializable接口,因此它支持序列化,能夠通過(guò)序列化傳輸;
  • 實(shí)現(xiàn)了RandomAccess接口,支持快速隨機(jī)訪問,實(shí)際上就是通過(guò)下標(biāo)序號(hào)進(jìn)行快速訪問;
  • 實(shí)現(xiàn)了Cloneable接口,能被克隆。

動(dòng)態(tài)擴(kuò)容

初始化

JDK1.7通過(guò)無(wú)參構(gòu)造方法(初始長(zhǎng)度默認(rèn)10,以默認(rèn)的大小來(lái)初始化內(nèi)部的數(shù)組)、有參構(gòu)造方法對(duì)數(shù)組進(jìn)行初始化。

確保內(nèi)部容量

通過(guò)判斷,如果夠則不進(jìn)行操作;容量不夠就擴(kuò)充來(lái)確保內(nèi)部容量。

1. ensureCapacityInternal方法名的英文大致是“確保內(nèi)部容量”,size表示的是執(zhí)行添加之前的元素個(gè)數(shù),并非ArrayList的容量,容量應(yīng)該是數(shù)組elementData的長(zhǎng)度。ensureCapacityInternal該方法通過(guò)將現(xiàn)有的元素個(gè)數(shù)數(shù)組的容量比較。看如果需要擴(kuò)容,則擴(kuò)容。

2. 是將要添加的元素放置到相應(yīng)的數(shù)組中。

根據(jù)傳入的最小需要容量minCapacity來(lái)和數(shù)組的容量長(zhǎng)度對(duì)比,如果minCapacity大于或等于數(shù)組容量,則需要進(jìn)行擴(kuò)容。

擴(kuò)容

private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    // jdk1.7采用位運(yùn)算比以前的計(jì)算方式更快
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    if (newCapacity - minCapacity < 0)
        newCapacity = minCapacity;
    //jdk1.7這里增加了對(duì)元素個(gè)數(shù)的最大個(gè)數(shù)判斷,MAX_ARRAY_SIZE 為int最大值減去8。
    if (newCapacity - MAX_ARRAY_SIZE > 0)
        newCapacity = hugeCapacity(minCapacity);
    // minCapacity is usually close to size, so this is a win:
    // 最重要的復(fù)制元素方法   Arrays.copyOf() 
    elementData = Arrays.copyOf(elementData, newCapacity);
}

綜述:ArrayList在第一次插入元素add()時(shí)分配10(默認(rèn))個(gè)對(duì)象空間。假如有20個(gè)數(shù)據(jù)需要添加,那么會(huì)在第11個(gè)數(shù)據(jù)的時(shí)候(原始數(shù)組容量存滿時(shí)),按照1.5倍增長(zhǎng);

之后擴(kuò)容會(huì)按照1.5倍增長(zhǎng)(10、15、22、、、)。

每次擴(kuò)容都是通過(guò)Arrays.copyOf(elementData, newCapacity) 這樣的方式實(shí)現(xiàn)的。ArrayList的自動(dòng)擴(kuò)容機(jī)制底層借助于System實(shí)現(xiàn)System.arraycopy(0,oldsrc,0,newsrc,length);

到此這篇關(guān)于關(guān)于Java的ArrayList數(shù)組自動(dòng)擴(kuò)容機(jī)制的文章就介紹到這了,更多相關(guān)ArrayList數(shù)組自動(dòng)擴(kuò)容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

西昌市| 日照市| 安岳县| 贵港市| 方山县| 云霄县| 崇州市| 颍上县| 罗定市| 芦溪县| 锡林浩特市| 新泰市| 巴东县| 册亨县| 皋兰县| 温宿县| 大埔区| 宁陕县| 西盟| 凤翔县| 阳原县| 武义县| 墨江| 邢台县| 乳源| 华阴市| 石阡县| 梅州市| 喀喇沁旗| 赤水市| 田林县| 望江县| 拉孜县| 广昌县| 延津县| 灌南县| 微山县| 辉南县| 潮安县| 财经| 永城市|