关于ArrayList的学习--日期12/28
关于ArrayList的学习
![]()
public 公共的,class代表一个类,后面是类的名字,extends是继承,implements是实现的意思,我现在大部分学的是实现一个接口。
这是在eclipse翻看源码看到的,E代表泛型。继承AbstractList<E>(一个抽象类),实现了List<E>,RandomAccess,Cloneable
AbstractList<E>继承AbstractCollection<E>,实现了List<E>接口。
List是一个接口(类的class替换为interface),继承了Collection<E>(集合的顶层父类)。

这是在网上查找的一张图片,链接Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 - 如果天空不死 - 博客园 (cnblogs.com)
ArrayList本质上是一个Object数组,初始化为空的数组,即{ },当进行Add添加元素的时候,数组会变成可以装十个元素的容器,下标为零到九。
计算上数组的下标一般从0开始。
关于ArrayList源码的学习
private私有的访问修饰符,仅限于本类访问,也可以通过反射获得。
static静态,final最终,Long基本数据类型四类八种(byte,short,int,long float,double char boolean)
private static final long serialVersionUID = 8683452581122892189L;
serialVersionUID 序列化的版本号,我也不太清楚是做什么的。
private static final int DEFAULT_CAPACITY = 10;
源码的解释是Default initial capacity,默认的初始容量。
private static final Object[ ] EMPTY_ELEMENTDATA = { };
源码的解释是Shared empty array instance used for empty instances,用于空实例的共享。
当调用无参构造方法的时候,默认的初始化是一个空的数组{ }.
private static final Object[ ] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = { };
源码的解释是
Shared empty array instance used for default sized empty instances. We
distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when
*first element is added.
共享的空数组实例,用于默认大小的空实例。 我们 将其与EMPTY_ELEMENTDATA区分开来,以便知道何时膨胀多少添加第一个元素。
个人的理解是用来区分当添加第一个元素的时候,用来区分的名称。
transient Object[ ] elementData;
transient关键字
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
源码的解释是
The array buffer into which the elements of the ArrayList are stored.
The capacity of the ArrayList is the length of this array buffer. Any
empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
will be expanded to DEFAULT_CAPACITY when the first element is added.
数组缓冲区,数组列表的元素被存储在其中。 数组列表的容量就是这个数组缓冲区的长度。 任何 empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA ,将在添加第一个元素时扩展为DEFAULT_CAPACITY。
也就是说一个Object数组,空的AyyayList来自elementData == 默认大小的空实例。
其初始化为空数组,当添加第一个元素的时候,会扩展为DEFAULT_CAPACITY 默认的初始容量为10。
private int size;
The size of the ArrayList (the number of elements it contains).
数组列表的大小,它所包含的元素数量。
public ArrayList(int initialCapacity) { //传入的参数大小,用以初始化数组大小
if (initialCapacity > 0) { //传入的参数大于0,初始化传入的参数数组长度
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) { //为0的话等于空的数组
this.elementData = EMPTY_ELEMENTDATA;
} else { //否则报异常
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}
源码的解释:Constructs an empty list with the specified initial capacity.
构造一个具有指定初始容量的空列表。
当调用有参构造方法,传入的参数为初始化的容量,也就是说我们可以在开始的时候初始化数组的大小。
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
源码解释:Constructs an empty list with an initial capacity of ten.
构建一个初始容量为10的空列表。

浙公网安备 33010602011771号