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

网友投稿 959 2022-08-19

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

深入剖析ArrayList的底层源码-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 extends AbstractList

implements List, 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的属性在对象被序列化的时候不会被保存,也就是它不会被序列化。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:深入剖析ArrayList的底层源码-构造方法及其源码剖析(arraylist底层是什么结构)
下一篇:连存活到JDK8中著名的Bug都不知道,怎么敢给你加薪(jdk8现在还能用吗)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~