为什么ArrayList初始化容量大小为10?
今天笔者在看源码时,无意间发现Arraylist的初始化容量大小为10 那么它为什么要设置为10呢? 下文笔者将一一道来,如下所示
ArrayList源码查看
/** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10; 从jdk1.2~jdk1.6源码中一直是默认10 jdk1.7及之后,则默认为空数组 /** * Shared empty array instance used for default sized empty instances. We * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when * first element is added. */ private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; /** * Constructs an empty list with an initial capacity of ten. */ public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; } 在add方法中调用了ensureCapacityInternal方法,进入该方法一开始是一个空容器所以size=0传入的minCapacity=1: private void ensureCapacityInternal(int minCapacity) { ensureExplicitCapacity(calculateCapacity(elementData, minCapacity)); } 上述方法中先通过calculateCapacity来计算容量: private static int calculateCapacity(Object[] elementData, int minCapacity) { if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { return Math.max(DEFAULT_CAPACITY, minCapacity); } return minCapacity; } 我们会惊奇的发现,jdk1.7之后采用懒加载的方式,实现默认容量为10
那么从上面的默认容量为10 可能只是作者的习惯而已,没有任何实质性的用途
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。