数据结构ArrayList

ArrayList的顶级理解

    • 1.ArrayList的简介
    • 2.ArrayList的使用
    • 3.ArrayList的构造
    • 4.ArrayList常见操作
    • 5.ArraList的遍历
      • 5.1 普通for循环
      • 5.2 增强for循环
      • 5.3 迭代器循环
    • 6.ArrayList的扩容机制

1.ArrayList的简介

数据结构ArrayList_第1张图片
数据结构ArrayList_第2张图片

  1. ***ArrayList是以泛型方式实现的,使用时必须要先实例化
  2. ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问
  3. ArrayList实现了Cloneable接口,表明ArrayList是可以clone的
  4. ArrayList实现了Serializable接口,表明ArrayList是支持序列化的
  5. 和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector
  6. ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表***

2.ArrayList的使用

数据结构ArrayList_第3张图片
数据结构ArrayList_第4张图片

3.ArrayList的构造

数据结构ArrayList_第5张图片
在这里插入图片描述

4.ArrayList常见操作

数据结构ArrayList_第6张图片
数据结构ArrayList_第7张图片

5.ArraList的遍历

5.1 普通for循环

数据结构ArrayList_第8张图片

5.2 增强for循环

数据结构ArrayList_第9张图片

5.3 迭代器循环

数据结构ArrayList_第10张图片

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;
}

你可能感兴趣的:(数据结构)