ArratList从入门到入土
基本介绍
继承图
要想了解一个类,首先先看一下其的继承关系:
![8cc16d867adbc5b9ec7cf0c8fcb0505b.png](https://i-blog.csdnimg.cn/blog_migrate/d589326fb5274a7323ecf8af25395b6f.png)
概述
ArrayList实现了List接口,是顺序容器,即元素存放的的顺序与放进去的顺序相同;允许放入null元素和元素重复。
底层通过数组实现,未实现同步。
随机访问速度快,插入和移除性能较差
数组大小灵活调整
ArrayList是基于动态数组实现的,在增删时候,需要数组的拷贝复制
ArrayList的默认初始化容量是10.每次扩容时候增加原先容量的一半,也就是变为原来的1.5倍
删除元素时不会减少容量,若希望减少容量则调用trimToSize()
使用iterator遍历可能会引发多线程异常
ArrayList<String> alist = new ArrayList<String>();
由于ArrayList实现了List接口,所以alist变量的类型可以是list类型;new关键字声明后的尖括号中也可以不用再指定元素的类型。
由于实现了RandomoAccess接口,即提供了随机访问的功能。我们可以通过元素的需要快速获得元素对象。
由于实现了Cloneable接口,即覆盖了函数clone()能被克隆
由于实现了Serializable接口,意味着支持序列化,能通过序列化去传输数据
基本属性
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable {
// 序列化id
private static final long serialVersionUID = 8683452581122892189L;
// 默认初始的容量
private static final int DEFAULT_CAPACITY = 10;
// 一个空对象(为什么是new Object[0]呢?)
//用Object[0]来代替null 很多时候我们需要传递参数的类型,而不是传null,所以用Object[0]
private static final Object[] EMPTY_ELEMENTDATA = new Object[0];
// 一个空对象,如果使用默认构造函数创建,则默认对象内容默认是该值
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = new Object[0];
// 当前数据对象存放地方,当前对象不参与序列化(主要是关键字transient起作用的)
transient Object[] elementData;
// 当前数组长度
private int size;
// 数组最大长度
private static final int MAX_ARRAY_SIZE = 2147483639;
}
方法
构造方法
无参构造方法
public ArrayList() {
// 创建一个空对象
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
传入容量的构造
当传入的是0的时候调用EMPTY_ELEMENTDATA
当传入的大于0就新建一个数组存储元素