ArrayList的顶级理解
- 1.ArrayList的简介
- 2.ArrayList的使用
- 3.ArrayList的构造
- 4.ArrayList常见操作
- 5.ArraList的遍历
- 5.1 普通for循环
- 5.2 增强for循环
- 5.3 迭代器循环
- 6.ArrayList的扩容机制
1.ArrayList的简介
- ***ArrayList是以泛型方式实现的,使用时必须要先实例化
- ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问
- ArrayList实现了Cloneable接口,表明ArrayList是可以clone的
- ArrayList实现了Serializable接口,表明ArrayList是支持序列化的
- 和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector
- ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表***
2.ArrayList的使用
3.ArrayList的构造
4.ArrayList常见操作
5.ArraList的遍历
5.1 普通for循环
5.2 增强for循环
5.3 迭代器循环
6.ArrayList的扩容机制
在这里插入代码片
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
private void grow(int minCapacity) {
// 获取旧空间大小
int oldCapacity = elementData.length;
// 预计按照1.5倍方式扩容
int newCapacity = oldCapacity + (oldCapacity >> 1);
// 如果用户需要扩容大小 超过 原空间1.5倍,按照用户所需大小扩容
if (newCapacity - minCapacity < 0)newCapacity = minCapacity;
// 如果需要扩容大小超过MAX_ARRAY_SIZE,重新计算容量大小
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// 调用copyOf扩容
elementData = Arrays.copyOf(elementData, newCapacity);
}
private static int hugeCapacity(int minCapacity) {
// 如果minCapacity小于0,抛出OutOfMemoryError异常
if (minCapacity < 0)
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE;
}