import java.util.Arrays; \n\npublic class ArrayList<E> { \n private static final int DEFAULT_CAPACITY = 10; // 默认初始容量 \n private static final Object[] EMPTY_ELEMENTDATA = {}; // 空的元素数组 \n private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; // 默认初始容量的空元素数组 \n\n private Object[] elementData; // 存储元素的数组 \n private int size; // 元素个数 \n\n // 无参构造函数,默认使用空的元素数组 \n public ArrayList() { \n this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; \n } \n\n // 带初始容量的构造函数 \n public ArrayList(int initialCapacity) { \n if (initialCapacity > 0) { \n this.elementData = new Object[initialCapacity]; \n } else if (initialCapacity == 0) { \n this.elementData = EMPTY_ELEMENTDATA; \n } else { \n throw new IllegalArgumentException("Illegal Capacity: " + initialCapacity); \n } \n } \n\n // 添加元素到ArrayList末尾 \n public boolean add(E element) { \n ensureCapacityInternal(size + 1); // 确保容量足够 \n elementData[size++] = element; // 将元素添加到数组末尾 \n return true; \n } \n\n // 确保容量足够 \n private void ensureCapacityInternal(int minCapacity) { \n if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { // 如果是默认初始容量的空元素数组 \n minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity); // 使用默认初始容量和minCapacity的较大值作为新容量 \n } \n\n ensureExplicitCapacity(minCapacity); // 确保容量足够 \n } \n\n // 确保容量足够 \n private void ensureExplicitCapacity(int minCapacity) { \n if (minCapacity - elementData.length > 0) { // 如果需要的容量大于当前容量 \n grow(minCapacity); // 扩容 \n } \n } \n\n // 扩容 \n private void grow(int minCapacity) { \n int oldCapacity = elementData.length; \n int newCapacity = oldCapacity + (oldCapacity >> 1); // 扩容为原来的1.5倍 \n\n if (newCapacity - minCapacity < 0) { // 如果需要的容量大于新容量,则直接使用需要的容量作为新容量 \n newCapacity = minCapacity; \n } \n\n elementData = Arrays.copyOf(elementData, newCapacity); // 复制原数组到新数组 \n } \n\n // 获取指定位置的元素 \n public E get(int index) { \n rangeCheck(index); // 检查索引是否越界 \n return elementData(index); \n } \n\n // 检查索引是否越界 \n private void rangeCheck(int index) { \n if (index >= size) { \n throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); \n } \n } \n\n // 返回指定位置的元素 \n E elementData(int index) { \n return (E) elementData[index]; \n } \n\n // 获取ArrayList中元素的个数 \n public int size() { \n return size; \n } \n\n // 判断ArrayList是否为空 \n public boolean isEmpty() { \n return size == 0; \n } \n} \n\n以上是ArrayList类的源码和注释。请注意,这只是ArrayList类的部分源码,省略了一些方法和实现细节。完整的ArrayList类源码可以在Java的源码库中找到。

Java ArrayList 源码解析及注释 - 深入理解数据结构

原文地址: https://www.cveoy.top/t/topic/qhaH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录