/** * The maximum size of array to allocate. * Some VMs reserve some header words in an array. * Attempts to allocate larger arrays may result in * OutOfMemoryError: Requested array size exceeds VM limit */ private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; 1. 2. 3...
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable 1. 1.1 ArrayList的常量 ArrayList 类中,定义了3个常量,官方解释如下: /** * Default initial capacity. * * 默认初始化容量,10 */ private static final int DEFAULT_CAPACITY = 10; /...
在聊ArrayList的初始化容量时,要先来回顾一下HashMap的初始化容量。这里以Java 8源码为例,HashMap中的相关因素有两个:初始化容量及装载因子:/** * The default initial capacity - MUST be a power of two. */static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16/** * The load fact...
也就是说这时候size是0(java 成员变量int的默认值是0),实际用来存储的elementData是个空数组。
如果存储的数组是一个空数组,那么最小容量就在DEFAULT_CAPACITY(默认容量,值为10)和size+1之间去一个最大值,现在我们回过头来想,如果这是第一次添加元素,那么minCapacity为此时就会被赋值为10,也就是,无参构造时,ArrayList的长度为10了。 接下来执行ensureExplicitCapacity(minCapacity),我们继续跟进源码: ...
这里以Java 8源码为例,HashMap中的相关因素有两个:初始化容量及装载因子:/*** The default initial...
* will be expanded to DEFAULT_CAPACITY when the first element is added. */transientObject[] elementData;// non-private to simplify nested class access 什么时候进行扩容? 当插入数据,导致size + 1 > elementData.length,也就是需要从容量超过目前数组长度时,需要进行扩容。
publicbooleanadd(Ee){ensureCapacityInternal(size+1);// 确保内部数组有足够的空间elementData[size++]=e;//将元素加入到数组的末尾,完成添加returntrue;} Java COPY 在这个过程当时,add的性能主要是由ensureCapacityInternal方法的实现,我们继续往下跟踪源码 ...
* will be expanded to DEFAULT_CAPACITY when the first element is added. */transient Object[]elementData;// non-private to simplify nested class access 6.数组长度 size 属性源码: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 /**
在聊ArrayList的初始化容量时,要先来回顾一下HashMap的初始化容量。这里以Java 8源码为例,HashMap中的相关因素有两个:初始化容量及装载因子: 复制 /*** The default initial capacity - MUST be a power of two.*/staticfinalintDEFAULT_INITIAL_CAPACITY=1<<4;// aka 16/*** The load factor used when...