我们了解其原理的最好方式就是看源码,下面我们就去看一下arrayList的源码:
一、ArrayList
arrayList借助数组实现的,有序,并且拥有固定的索引值。因此查询效率非常高,但是删除、插入等动作,需要去调用System.arraycopy函数操作内存中的数据搬移,相较效率较低。
1-1、首先看一下我们看一下构造器.
/**
* 默认初始容量
*/
private static final int DEFAULT_CAPACITY = 10;
/**
* 用于空实例的共享空数组实例.
*/
private static final Object[] EMPTY_ELEMENTDATA = {};
/**
* 用于默认大小的空实例的共享空数组实例。我们将其与空元素数据区分开来,以了解添加第一个元素要扩容多少
*/
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
/**
* 存储ArrayList元素的数组缓冲区。ArrayList的容量是此数组缓冲区的长度。添加第一个元素时,elementData==DEFAULTCAPACITY_EMPTY_ELEMENTDATA时,ArrayList都将扩展为默认容量
*/
transient Object[] elementData; // non-private to simplify nested class access
/**
* arrayList的大小
*/
private int size;
/**
* 指定容量的构造函数
*/
public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
this.elementData = EMPTY_ELEMENTDATA;
} else {
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}
/**
* 无