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

資訊專欄INFORMATION COLUMN

集合(一) - ArrayList

Barrior / 1215人閱讀

一、層級關系

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

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

private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

第一個結論:ArrayList底層是數組

第二個結論:若用無參構造器的方式實例化ArrayList,只是聲明了數組,還未分配空間

(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 = {};

補充第二結論:若用有參構造器的方式實例化ArrayList且initialCapacity大于0,則既聲明了數組,也分配了空間

三、基本方法的使用 add

流程圖

源碼解析

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

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

/**
 * 若數組是通過無參構造器的方式實例化的話,返回的minCapacity為10,最后會通過grow方法復制生成一個大小為10的數組
 * 若數組是通過有參構造器的方式實例化的話,返回的minCapacity為當前要操作的數組下標,不建議聲明小于10的數組空間,因為這樣前幾次add都要去擴容復制生成一個新的數組
 */
private void ensureExplicitCapacity(int minCapacity) {
    modCount++;

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

//擴容大小:原數組大小 + 原數組大小/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時,不建議聲明小于10的容量,因為這樣前幾次add都要去擴容復制生成一個新的數組

Arrays.copyOf(T[] original, int newLength):該方法會創建一個新的數組

remove

流程圖

源碼解析

public E remove(int index) {
    //檢查index是否 >= size,若大于則報數組越界異常
    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 - 淺復制

public static void arraycopy(
                             Object src,  //源數組
                             int srcPos,  //源數組要復制的起始位置
                             Object dest, //目標數組
                             int destPos, //目的數組放置的起始位置
                             int length   //復制長度
                             )
四、補充

ArrayList是線程不安全的,表現在多線程下add和remove可能會發生數組越界

不要在foreach循環里進行元素的remove/add操作。remove元素請使用Iterator方式,如果并發操作,需要對Iterator對象加鎖

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/71558.html

相關文章

  • 1、自定義類型的定義及使用 2、自定義類的內存圖 3、ArrayList集合的基本功能 4、隨機點名

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

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

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

    Miyang 評論0 收藏0
  • Java集合框架——List接口

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

    褰辯話 評論0 收藏0
  • java集合

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

    JinB 評論0 收藏0
  • Java 集合 List

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

    AlphaWatch 評論0 收藏0
  • 集合框架源碼學習之ArrayList

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

    BLUE 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<