编程学习网 > 编程语言 > Java > 深入剖析ArrayList的底层源码-ArrayList介绍及其源码剖析
2020
03-12

深入剖析ArrayList的底层源码-ArrayList介绍及其源码剖析

一、ArrayList介绍及其源码剖析
Resizable-array implementation of the List interface. Implements all
optional list operations, and permits all elements, including null. In
addition to implementing the List interface,this class provides
methods to manipulate the size of the array that is used internally to
store the list. (This class is roughly equivalent to Vector, except
that it is unsynchronized.)
 
ArrayList 是从JDK1.2 引入的。
 
ArrayList是可调整大小的数组,实现了List接口。 实现所有可选列表操作,并允许所有元素包括null 。 除了实现List 接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组的大小。 (这个类是大致相当于Vector,不同之处在于它是不同步的)。
 
ArrayList内部封装一个数组,用数组来存储数据。内部数组的默认初始容量 10,存满后 1.5 倍增长
 
从 JDK1.8开始, ArrayList 一开始创建一个长度为 0 的数组,当添加第一个元素时再创建一个始容量为 10 的 数组。
 
继承结构:


ArrayList继承于AbstractList,实现了Cloneable、List、RandomAccess、Serializable这些接口。
ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
ArrayList 实现了Cloneable接口,即覆盖了函数clone(),所以它能被克隆。
ArrayList 实现了RandmoAccess接口,因此提供了随机访问功能。
ArrayList 实现了Serializable接口,这意味着ArrayList支持序列化
ArrayList 属性源码剖析
 
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
// 序列化 id
    private static final long serialVersionUID = 8683452581122892189L;
 
    // 默认容量的大小为 10
    private static final int DEFAULT_CAPACITY = 10;
 
    // 空实例共享的一个空数组
    private static final Object[] EMPTY_ELEMENTDATA = {};
 
    // 默认的空数组常量为DEFAULTCAPACITY_EMPTY_ELEMENTDATA
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
 
    // transient不可序列化, 存放元素的数组
    transient Object[] elementData; // non-private to simplify nested class access
 
   // 元素的大小,默认是0
    private int size;
 
    ......
 
// 最大数组容量为 Integer.MAX_VALUE – 8
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
}
 
注意:被标记为transient的属性在对象被序列化的时候不会被保存,也就是它不会被序列化。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取