ArrayList源码分析(1.8)

2019-10-29  本文已影响0人  台风口的猪

基本属性

   // 初始化默认容器大小 
    private static final int DEFAULT_CAPACITY = 10; 

ArrayList的扩容

1.当添加第一个元素时,将扩展到默认容量。

默认容量大小为10

2. modCount++记录操作list 的次数,判断是否需要扩容

image

3.如果需要扩容 (不需要扩容加表末尾)

image

1处表示:新容量扩大到原容量(上一次扩容容量)的1.5倍,右移一位相关于原数值除以2
2处表示:真正扩容的地方
3.copy数据
通过Arrays.copyOf() 在其内部创建了一个新的数组,然后调用arrayCopy()向其复制内容,返回出去,
数据copy过程
1.copyOf()的实现是用的是arrayCopy();
2.arrayCopy()需要目标数组,对两个数组的内容进行可能不完全的合并操作。
3.copyOf()在内部新建一个数组,调用arrayCopy()将original内容复制到copy中去,并且长度为newLength。返回copy;


image image

src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。

3.1 ArrayList有容量上限吗?
  ArrayList是有最大容量的,最大为Integer.MAX_VALUE,即((2^31)-1)2147483647
  有些虚拟机在阵列中保留一些头信息,防止内存溢出,
 此时,我们发现ArrayList最大容量是(Integer.MAX_VALUE-8)
上一篇下一篇

猜你喜欢

热点阅读