https://www.nowcoder.com/feed/main/detail/6784e01cd32e47dc937adef2756df7bb?sourceSSR=users
chatgpt
在Java中,ArrayList的扩容是一个重要的性能优化过程。 ArrayList底层是基于数组实现的,因此当现有数组无法容纳更多元素时, ArrayList会创建一个更大的数组并将现有元素复制到新的数组中。
扩容会在向ArrayList添加元素时发现内部数组已满时触发:
• 条件:当前容量(size)达到底层数组的最大容量( elementData.length)。
扩容时,ArrayList会根据一定的规则计算新容量。核心逻辑在 **ensureCapacityInternal()**方法中实现。以下是主要规则:
• 默认容量:当数组为空时(即初次扩容),默认容量为10。
• 增量规则:新容量是原容量的 1.5倍,即:
newCapacity = oldCapacity + (oldCapacity >> 1);
• 调整为所需最小容量:如果 newCapacity不足以满足需求(例如大量元素被添加),则会调整为所需的最小容量。
• 将新容量用于分配更大的数组。