国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

集合(一) - ArrayList

Barrior / 1211人閱讀

一、層級(jí)關(guān)系

二、初始化方式
(1)List list = new ArrayList<>();

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

private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

第一個(gè)結(jié)論:ArrayList底層是數(shù)組

第二個(gè)結(jié)論:若用無參構(gòu)造器的方式實(shí)例化ArrayList,只是聲明了數(shù)組,還未分配空間

(2)List list = new ArrayList<>(10);

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

private static final Object[] EMPTY_ELEMENTDATA = {};

補(bǔ)充第二結(jié)論:若用有參構(gòu)造器的方式實(shí)例化ArrayList且initialCapacity大于0,則既聲明了數(shù)組,也分配了空間

三、基本方法的使用 add

流程圖

源碼解析

public boolean add(E e) {
    //校驗(yàn)數(shù)組容量,若空間不夠則擴(kuò)容復(fù)制生成一個(gè)新的數(shù)組
    ensureCapacityInternal(size + 1); 
    //賦值
    elementData[size++] = e;
    return true;
}

private void ensureCapacityInternal(int minCapacity) {
    ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}

/**
 * 若數(shù)組是通過無參構(gòu)造器的方式實(shí)例化的話,返回的minCapacity為10,最后會(huì)通過grow方法復(fù)制生成一個(gè)大小為10的數(shù)組
 * 若數(shù)組是通過有參構(gòu)造器的方式實(shí)例化的話,返回的minCapacity為當(dāng)前要操作的數(shù)組下標(biāo),不建議聲明小于10的數(shù)組空間,因?yàn)檫@樣前幾次add都要去擴(kuò)容復(fù)制生成一個(gè)新的數(shù)組
 */
private void ensureExplicitCapacity(int minCapacity) {
    modCount++;

    // overflow-conscious code
    if (minCapacity - elementData.length > 0)
    grow(minCapacity);
}

//擴(kuò)容大小:原數(shù)組大小 + 原數(shù)組大小/2
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);
}

其它說明

初始化ArrayList時(shí),不建議聲明小于10的容量,因?yàn)檫@樣前幾次add都要去擴(kuò)容復(fù)制生成一個(gè)新的數(shù)組

Arrays.copyOf(T[] original, int newLength):該方法會(huì)創(chuàng)建一個(gè)新的數(shù)組

remove

流程圖

源碼解析

public E remove(int index) {
    //檢查index是否 >= size,若大于則報(bào)數(shù)組越界異常
    rangeCheck(index);

    modCount++;
    E oldValue = elementData(index);

    int numMoved = size - index - 1;
    if (numMoved > 0)
    System.arraycopy(elementData, index+1, elementData, index,
    numMoved);
    elementData[--size] = null; // clear to let GC do its work

    return oldValue;
}

其它說明

System.arraycopy - 淺復(fù)制

public static void arraycopy(
                             Object src,  //源數(shù)組
                             int srcPos,  //源數(shù)組要復(fù)制的起始位置
                             Object dest, //目標(biāo)數(shù)組
                             int destPos, //目的數(shù)組放置的起始位置
                             int length   //復(fù)制長(zhǎng)度
                             )
四、補(bǔ)充

ArrayList是線程不安全的,表現(xiàn)在多線程下add和remove可能會(huì)發(fā)生數(shù)組越界

不要在foreach循環(huán)里進(jìn)行元素的remove/add操作。remove元素請(qǐng)使用Iterator方式,如果并發(fā)操作,需要對(duì)Iterator對(duì)象加鎖

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/71558.html

相關(guān)文章

  • 1、自定義類型的定義及使用 2、自定義類的內(nèi)存圖 3、ArrayList集合的基本功能 4、隨機(jī)點(diǎn)名

    摘要:自定義類的概述自定義類的概述代碼映射成現(xiàn)實(shí)事物的過程就是定義類的過程。自定義類的格式自定義類的格式使用類的形式對(duì)現(xiàn)實(shí)中的事物進(jìn)行描述。 01引用數(shù)據(jù)類型_類 * A: 數(shù)據(jù)類型 * a: java中的數(shù)據(jù)類型分為:基本類型和引用類型 * B: 引用類型的分類 * a: Java為我們提供好的類,比如說:Scanner,Random等。 * b: 我們自己創(chuàng)建的類...

    only_do 評(píng)論0 收藏0
  • Java集合源碼分析系列-(ArrayList源碼剖析

    摘要:需要注意的是,通過構(gòu)造函數(shù)定義初始量是動(dòng)態(tài)數(shù)組的實(shí)際大小。帶容量的構(gòu)造函數(shù)新建一個(gè)容量為的數(shù)組默認(rèn)構(gòu)造函數(shù),默認(rèn)為空構(gòu)造一個(gè)包含指定元素的第一個(gè)構(gòu)造方法使用提供的來初始化數(shù)組的大小。 前言 今天介紹經(jīng)常使用的一個(gè)Java集合類——ArrayList(基于JDK1.8.0_121)。ArrayList在工作和日常面試中經(jīng)常被使用或者提到。總的來說,工作中使用ArrayList主要是因?yàn)閯?dòng)...

    Miyang 評(píng)論0 收藏0
  • Java集合框架——List接口

    摘要:第三階段常見對(duì)象的學(xué)習(xí)集合框架接口按照集合框架的繼承體系,我們先從中的接口開始學(xué)習(xí)一概述及功能演示概述在中充當(dāng)著一個(gè)什么樣的身份呢有序的也稱為序列實(shí)現(xiàn)這個(gè)接口的用戶以對(duì)列表中每個(gè)元素的插入位置進(jìn)行精確地控制。線程不安全,效率高。 第三階段 JAVA常見對(duì)象的學(xué)習(xí) 集合框架——List接口 showImg(https://segmentfault.com/img/remote/14600...

    褰辯話 評(píng)論0 收藏0
  • java集合

    摘要:主要用于遍歷集合中的元素,對(duì)象也被稱為迭代器。使用迭代過程中,不可修改集合元素迭代器采用快速失敗機(jī)制。一旦迭代過程中檢測(cè)到該集合已經(jīng)被修改,程序立即出發(fā)異常,而不是顯示修改后的結(jié)果,避免了共享資源而引發(fā)的潛在問題。 集合類和數(shù)組不一樣,數(shù)組元素既可以是基本類型的值,也可以是對(duì)象(實(shí)際上保存的是對(duì)象的引用變量);而集合里只能保存對(duì)象(實(shí)際上只是保存對(duì)象的引用變量,但通常習(xí)慣上認(rèn)為集...

    JinB 評(píng)論0 收藏0
  • Java 集合 List

    摘要:集合代表一個(gè)元素有序可重復(fù)的集合,集合中每個(gè)元素都有其對(duì)應(yīng)的順序索引。集合默認(rèn)按元素的添加順序設(shè)置元素的索引。 List集合代表一個(gè)元素有序、可重復(fù)的集合,集合中每個(gè)元素都有其對(duì)應(yīng)的順序索引。List集合可以通過索引來訪問指定位置的集合元素。List集合默認(rèn)按元素的添加順序設(shè)置元素的索引。 Java8改進(jìn)的List接口和ListIterator接口 普通方法 List是有序集合,因此L...

    AlphaWatch 評(píng)論0 收藏0
  • 集合框架源碼學(xué)習(xí)之ArrayList

    摘要:用戶自己指定容量創(chuàng)建大小的數(shù)組創(chuàng)建空數(shù)組默認(rèn)構(gòu)造函數(shù),其默認(rèn)初始容量為構(gòu)造一個(gè)包含指定集合的元素的列表,按照它們由集合的迭代器返回的順序。以正確的順序返回該列表中的元素的迭代器。此方法充當(dāng)基于陣列和基于集合的之間的橋梁。 目錄: 0-0-1. 前言 0-0-2. 集合框架知識(shí)回顧 0-0-3. ArrayList簡(jiǎn)介 0-0-4. ArrayList核心源碼 0-0-5. Ar...

    BLUE 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<