Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 267c79a

Browse files
Merge branch 'master' of https://github.com/Snailclimb/JavaGuide
2 parents 59ac904 + c3fba3e commit 267c79a

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

‎docs/java/collection/ArrayList源码+扩容机制分析.md‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /