溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ArrayList集合初始化及擴(kuò)容方法是什么

發(fā)布時(shí)間:2023-03-13 11:41:42 來(lái)源:億速云 閱讀:86 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“ArrayList集合初始化及擴(kuò)容方法是什么”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“ArrayList集合初始化及擴(kuò)容方法是什么”文章能幫助大家解決問(wèn)題。

    ArrayList集合初始化及擴(kuò)容

    ArrayList 集合

    1.默認(rèn)初始化容量為10(底層先創(chuàng)建了一個(gè)長(zhǎng)度為0的數(shù)組,當(dāng)添加第一個(gè)元素的時(shí)候,初始化容量為10)

    2.集合底層為一個(gè)Object[]數(shù)組

    3.構(gòu)造方法:

    new ArrayList();
    new ArrayList(20);

    4.ArrayList集合的擴(kuò)容:原容量的1.5倍。

    ArrayList集合的底層是數(shù)組,怎么優(yōu)化?

    盡可能的減少擴(kuò)容。因?yàn)閿?shù)組擴(kuò)容效率比較低,建議在使用Arraylist集合的時(shí)候預(yù)估計(jì)元素的個(gè)數(shù),給定一個(gè)初始化容量。

    5.數(shù)組優(yōu)點(diǎn):檢索效率比較高

    6.數(shù)組缺點(diǎn):隨機(jī)增刪元素效率比較低

    7.向數(shù)組末尾添加元素,效率很高,不受影響

    8.面試官經(jīng)常問(wèn)的一個(gè)問(wèn)題:

    這么多集合中,你用那個(gè)集合最多?

    答:ArrayList集合

    因?yàn)橥鶖?shù)組末尾添加元素,對(duì)效率不受影響。

    另外,我們檢索查找某個(gè)元素的操作比較多。

    package Collection;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /*
    ArrayList 集合:
    1.默認(rèn)初始化容量為10(底層先創(chuàng)建了一個(gè)長(zhǎng)度為0的數(shù)組,當(dāng)添加第一個(gè)元素的時(shí)候,初始化容量為10)
    2.集合底層為一個(gè)Object[]數(shù)組
    3.構(gòu)造方法:
         new ArrayList();
         new ArrayList(20);
    4.ArrayList集合的擴(kuò)容:
        原容量的1.5倍。
        ArrayList集合的底層是數(shù)組,怎么優(yōu)化?
          盡可能的減少擴(kuò)容。因?yàn)閿?shù)組擴(kuò)容效率比較低,建議在使用Arraylist集合的
         時(shí)候預(yù)估計(jì)元素的個(gè)數(shù),給定一個(gè)初始化容量。
    5.數(shù)組優(yōu)點(diǎn):
         檢索效率比較高
    6.數(shù)組缺點(diǎn):
         隨機(jī)增刪元素效率比較低
    7.向數(shù)組末尾添加元素,效率很高,不受影響
    8.面試官經(jīng)常問(wèn)的一個(gè)問(wèn)題:
      這么多集合中,你用那個(gè)集合最多?
        答:ArrayList集合
        因?yàn)橥鶖?shù)組末尾添加元素,對(duì)效率不受影響。
        另外,我們檢索查找某個(gè)元素的操作比較多。
     */
    public class ArrayLisTest01 {
        public static void main(String[] args) {
            List l1=new ArrayList();
            //集合的size方法是獲取當(dāng)前集合元素的個(gè)數(shù),不是獲取集合的容量
            System.out.println(l1.size());
    
            List l2=new ArrayList(20);
            System.out.println(l2.size());
    
        }
    }

    ArrayList擴(kuò)容機(jī)制(原理)

    ArrayList擴(kuò)容的本質(zhì)就是計(jì)算出新的擴(kuò)容數(shù)組的size后實(shí)例化,并將原有數(shù)組內(nèi)容復(fù)制到新數(shù)組中去。(不是原數(shù)組,而是新數(shù)組然后給予數(shù)組對(duì)象地址)。

    默認(rèn)情況下,新的容量會(huì)是原容量的1.5倍。 新容量=舊容量右移一位(相當(dāng)于除于2)在加上舊容量

    ArrayList 的底層是用動(dòng)態(tài)數(shù)組來(lái)實(shí)現(xiàn)的。我們初始化一個(gè)ArrayList 集合還沒(méi)有添加元素時(shí),其實(shí)它是個(gè)空數(shù)組,只有當(dāng)我們添加第一個(gè)元素時(shí),內(nèi)部會(huì)調(diào)用擴(kuò)容方法并返回最小容量10,也就是說(shuō)ArrayList 初始化容量為10。

    當(dāng)前數(shù)組長(zhǎng)度小于最小容量的長(zhǎng)度時(shí)(前期容量是10,當(dāng)添加第11個(gè)元素時(shí)就就擴(kuò)容),便開(kāi)始可以擴(kuò)容了,ArrayList 擴(kuò)容的真正計(jì)算是在一個(gè)grow()里面,新數(shù)組大小是舊數(shù)組的1.5倍,如果擴(kuò)容后的新數(shù)組大小還是小于最小容量,那新數(shù)組的大小就是最小容量的大小,后面會(huì)調(diào)用一個(gè)Arrays.copyof方法,這個(gè)方法是真正實(shí)現(xiàn)擴(kuò)容的步驟。

    關(guān)于“ArrayList集合初始化及擴(kuò)容方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI