0
点赞
收藏
分享

微信扫一扫

【JAVASE小新】ArrayList的底层操作机制(第一部分)

残北 2022-02-28 阅读 48
package Gather.List;

import java.util.ArrayList;

/**
 * @author 小王宝友
 * @version 3.89
 * ArrayList的底层操作机制:
 *      1、ArrayList中的数据都会存放到一个Object类型的elementDate的数组里
 *      transient Object[] elementData transient是瞬间的,组成数组时不会被序列化
 *      2、当创建ArrayList对象时,如果使用的是无参构造器,则初始的elementData容量为0
 *      第一次添加会扩容到10,若需要再次扩容,则扩容到elementData的1.5倍
 *      3、如果使用的是指定大小的构造器,则初始elementData容量为指定大小
 *      ,若需要扩容,则直接扩容为elementData的1.5倍
 *      4、第一次扩容为newCapacity = 10,第二次及其以后为原来数组的1.5倍来扩容
 *      5、扩容使用的是Array.copyOf()是为了保证数组原来的数据不被删除
 */
@SuppressWarnings({"all"})
public class ArrayListSource {
    public static void main(String[] args) {


        //使用无参构造器创建ArrayList对象
        //相当于创建了一个空的elementData数组
        ArrayList<Object> arrayList = new ArrayList<>();
        //创建一个指定大小为8的ArrayList对象
        //ArrayList<Object> arrayList = new ArrayList<>(8);
        //使用for循环给arrayList集合添加1-10的数据
        //增加数组时,调用arrayList.add方法时会先使用ensureCapacityInternal();的方法确容器是否够数据存储
        //再将数据放入到elementData的数组中
        //1、先确定是否需要扩容
        //2、然后再执行arrayList.add方法,赋值
        for (int i = 0; i <= 10; i++) {
            arrayList.add(i);
        }
        使用for循环给arrayList集合添加11-15的数据
        for (int i = 11; i <= 15; i++) {
            arrayList.add(i);
        }
        arrayList.add(100);
        arrayList.add(200);
        arrayList.add(null);

    }
}

 当第一个for循环完成时elementData数组有10个空间,size表示数组大小,modCount为数组改变的次数。

当第二次for循环完成时 共有15个空间

再往下添加时,数组会扩容到22个空间

 

 

举报

相关推荐

0 条评论