返回
ArrayList 底层源码解读,带你领略集合框架的魅力
后端
2023-09-11 10:18:47
我们每天都在使用的 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 的优点,并避免其潜在的缺陷。