@@ -541,7 +541,7 @@ public class ArrayList<E> extends AbstractList<E>
541541
542542### 3.1 . 先从 ArrayList 的构造函数说起
543543
544- ** ArrayList 有三种方式来初始化,构造方法源码如下:**
544+ ** ( JDK8 ) ArrayList 有三种方式来初始化,构造方法源码如下:**
545545
546546```java
547547 /**
@@ -596,6 +596,8 @@ public class ArrayList<E> extends AbstractList<E>
596596
597597细心的同学一定会发现 :** 以无参数构造方法创建 ArrayList 时,实际上初始化赋值的是一个空数组。当真正对数组进行添加元素操作时,才真正分配容量。即向数组中添加第一个元素时,数组容量扩为 10 。** 下面在我们分析 ArrayList 扩容时会讲到这一点内容!
598598
599+ > 补充:JDK7 new 无参构造的ArrayList对象时,直接创建了长度是10的Object []数组elementData 。jdk7中的ArrayList的对象的创建**类似于单例的饿汉式**,而jdk8中的ArrayList的对象的创建**类似于单例的懒汉式**。JDK8的内存优化也值得我们在平时开发中学习。
600+ 599601### 3.2. 一步一步分析 ArrayList 扩容机制
600602
601603这里以无参构造函数创建的 ArrayList 为例分析
@@ -619,7 +621,7 @@ public class ArrayList<E> extends AbstractList<E>
619621
620622#### 3.2.2. 再来看看 `ensureCapacityInternal ()` 方法
621623
622- 可以看到 `add` 方法 首先调用了`ensureCapacityInternal (size + 1 )`
624+ (JDK7) 可以看到 `add` 方法 首先调用了`ensureCapacityInternal (size + 1 )`
623625
624626```java
625627 // 得到最小扩容量
@@ -635,6 +637,8 @@ public class ArrayList<E> extends AbstractList<E>
635637
636638** 当 要 add 进第 1 个元素时,minCapacity 为 1,在 Math.max ()方法比较后,minCapacity 为 10。**
637639
640+ > 此处和后续 JDK8 代码格式化略有不同,核心代码基本一样。
641+ 638642#### 3.2.3. `ensureExplicitCapacity ()` 方法
639643
640644如果调用 `ensureCapacityInternal ()` 方法就一定会进入(执行)这个方法,下面我们来研究一下这个方法的源码!
0 commit comments