返回

ArrayList 底层源码解读,带你领略集合框架的魅力

后端

我们每天都在使用的 ArrayList,你真的了解它吗?ArrayList 作为 Java 集合框架中的重要一员,以其动态数组的特性,在存储和操作对象方面表现出色。今天,我们就来深入探究 ArrayList 的底层源码,带你领略集合框架的魅力。

ArrayList 的动态数组实现

ArrayList 的核心是一个动态数组,它可以根据需要自动扩容或缩容。数组的初始大小为 10,当元素数量达到数组容量时,ArrayList 会自动将容量翻倍,以容纳更多元素。

private static final int DEFAULT_CAPACITY = 10;

private Object[] elementData;

public ArrayList() {
    this.elementData = new Object[DEFAULT_CAPACITY];
}

元素添加和删除操作

添加元素时,如果数组已满,ArrayList 会先扩容,然后再将元素添加到数组中。

public void add(E e) {
    ensureCapacityInternal(size + 1);  // 扩容
    elementData[size++] = e;
}

删除元素时,ArrayList 会将被删除元素后面的元素向前移动,以填补空位。

public E remove(int index) {
    Objects.checkIndex(index, size);
    E oldValue = elementData(index);
    int numMoved = size - index - 1;
    if (numMoved > 0)
        System.arraycopy(elementData, index+1, elementData, index,
                         numMoved);
    elementData[--size] = null; // clear to let GC do its work
    return oldValue;
}

ArrayList 在集合框架中的角色

ArrayList 属于 Java 集合框架中的一种列表(List),它提供了一个有序且可重复的元素集合。ArrayList 与其他列表实现,如 LinkedList 相比,具有以下优势:

  • 随机访问性能优异,因为元素存储在连续的数组中。
  • 插入和删除操作的性能随着数组容量的增加而提高。

总结

通过对 ArrayList 底层源码的深入分析,我们揭开了其动态数组的实现方式,元素添加和删除操作的奥秘,以及 ArrayList 在集合框架中的重要角色。理解 ArrayList 的底层实现对于高效使用集合框架至关重要,它使我们能够充分利用 ArrayList 的优点,并避免其潜在的缺陷。