把之前的学习笔记整理了一下。写在博客上面,好方便以后的查看,顺便也复习一下,里面有什么不对的地方,欢迎大家提出,萌萌哒~。
1.ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。
2. ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List list)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的CopyOnWriteArrayList类。
/**
* Increases the capacity to ensure that it can hold at least the
* number of elements specified by the minimum capacity argument.
*
* @param minCapacity the desired minimum capacity
*/
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length; //得到原来的大小
int newCapacity = oldCapacity + (oldCapacity >> 1); //讲原来的大小进行扩容
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
//MAX_ARRAY_SIZE=Integer.MAX_VALUE - 8 ArrayList最大可分配的容量
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
//这里就是进行扩容的关键一步
elementData = Arrays.copyOf(elementData, newCapacity);
}