特点:
1.底层数据结构是数组
2.默认数组大小是10
3.保证了数据的有序性,按照插入顺寻来存储
4.查询效率高,基于数组索引来定位数据
5.集合扩容每次扩容为原大小的1.5倍.
6.集合数据可以重
方法
trimToSize():作用是去掉预留元素的位置,内存紧张的时候用
ensureCapacity(int n):如果ArrayList中添加大量元素,可用此方法增加效率,一次性扩容.
grow(int m):以1.5倍扩容
int oldCapacity = elementData.length;
int newCapacity = oldCapacity+(oldCapacity >>1);
contains(Object o):返回boolean值,该链表中是否有O
indexOf(Object o):返回o在ArrayList中第一次出现的位置,没有就返回-1.
lastIndexOf(Object o):返回o在ArrayList中最后一次出现的位置,没有就返回-1
clone():克隆,返回ArrayList,会产生新对象
get(int i):得到i号索引位置的值,先回进行rangeCheck(i)
set(int i,E e):这是在i号位置用e进行replace,然后返回原来的elem.
add(E e):先会进行ensureCapacityInternal(size+1)//modCount change
add(int i,E e):先会进行rangeCheck 再ensureCapacityInternal(size+1) //modCount change
源码分析
remove(int i):
numMoved是要进行移位的元素个数,运用数组拷贝进行移位
addAll(Collection <? extends E> c):
先将容器C里面的数据转换成数组,然后运用数组拷贝
从a的0号开始 拷贝到elementData的后面,拷贝a.length个
addAll(int i,Collection c):
将指定容器从i号位置开始进行添加.
求并集