简介
ArrayList实际上是动态数组,它提供动态增删元素的方法,数组大小可以灵活设置,但是ArrayList不是线程安全的,因此在多线程下不建议使用。
血缘关系
ArrayList继承自AbstractList,实现了List等接口,源代码如下:
java.lang.Object
↳ java.util.AbstractCollection<E>
↳ java.util.AbstractList<E>
↳ java.util.ArrayList<E>
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable {}
ArrayList的构造方法源码
// 默认构造函数
ArrayList(){
this(10);
//调用ArrayList(10) 默认初始化一个大小为10的object数组。
}
// capacity是ArrayList的默认容量大小。当由于增加数据导致容量不足时,容量会添加上一次容量大小的一半。
ArrayList(int capacity){
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
//如果用户初始化大小小于0抛异常,否则新建一个用户初始值大小的object数组。
this.elementData = new Object[initialCapacity];
}
// 使用一个collection来创建一个ArrayList
ArrayList(Collection<? extends E> collection){
elementData = c.toArray();
size = elementData.length;
// 当c.toArray返回的不是object类型的数组时,进行下面转化。
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
ArrayList常用方法
//Collection实现的方法
boolean add(E object) //往ArrayList添加一个元素
boolean addAll(Collection<? extends E> collection) //往ArrayList添加一个collection
void clear() //清空ArrayList中的元素
boolean contains(Object object) //判断当前ArrayList是否包含object
boolean isEmpty() //判断当前ArrayList是否为空
Iterator<E> iterator() //迭代
boolean remove(Object object) //移除一个元素
int size() //返回当前ArrayList大元素个数
// AbstractCollection实现的方法
void add(int location, E object)
E get(int location)
int indexOf(Object object)
int lastIndexOf(Object object)
E remove(int location)
E set(int location, E object)
List<E> subList(int start, int end)
// ArrayList实现的方法
Object clone()
void ensureCapacity(int minimumCapacity)
void trimToSize()
void removeRange(int fromIndex, int toIndex)
ArrayList的使用还是比较简单的,是我们开发中常用到的类,本文就先简单记录下它的基本使用到的api,日后功力加深后再去研究其源码实现过程。
网友评论