ArrayList 源码剖析(jdk 1.8)

第一篇博客哈,比较粗糙。各位将就着康康。

ArrayList 底层实现: 数组,

在源码中我们不难看出 ArrayList 容器的初始阈值是 10

它为我们提供了三个构造器

空构造器 => 创建一个空数组对象。
传入初始长度构造器 : 入参为 n => 创建一个初始长度为n的数组对象。
传入实现了Collection接口的参数 => 创建出一个包含指定元素的对象。

且实例化出来的ArrayList对象,会按照传入对象的排序规则排序。相当于把传入的对象copy了一份,再构造出一个ArrayList。(包括排序规则等等)

ArrayList 源码剖析(jdk 1.8)

add() 函数

他提供了两个API

一个是 add (E e)
这个API会在ArrayList数组末尾追加一个元素。
在源码中可以看出,它会先去调用 ensureCapacityInternal 这个API 。
这个API会去判断数组的长度是否够用。如果不够用会对ArrayList进行扩容操作。

下面贴出源码
ArrayList 源码剖析(jdk 1.8)

ArrayList 源码剖析(jdk 1.8)
ArrayList 源码剖析(jdk 1.8)
ArrayList 源码剖析(jdk 1.8)
第二个 API add (int index, E element)
指定下标插入元素
ArrayList 源码剖析(jdk 1.8)
ArrayList 源码剖析(jdk 1.8)

set(int index, E element)方法

替换指定下标元素
ArrayList 源码剖析(jdk 1.8)

remove(int index) 方法

ArrayList 源码剖析(jdk 1.8)

文末,介绍下 System.arraycopy 。(来自:百度百科)

ArrayList 源码剖析(jdk 1.8)