ArrayList扩容机制

ArrayList扩容的本质是计算出新的扩容数组的size后实例化,并将原有数组内容复制到新数组中。

  1. ArrayList的底层是用动态数组实现的,
  • 初始化一个ArrayList 集合还没有添加元素时,是个空数组,
  • 当添加第一个元素时,内部会调用扩容方法并返回最小容量10,也就是ArrayList 初始化容量默认为10
  1. 当添加一个新元素到ArrayList时,ArrayList会先判断当前存储元素的数组容量是否已经达到了最大大小(即Integer.MAX_VALUE),如果已经达到了则不再扩容。否则扩容。
  2. ArrayList扩容的计算是在一个grow()里,grow方法先尝试将数组扩大为原数组的1.5倍(新容量=旧容量右移一位(相当于除2)+ 旧容量)
  3. 若新的容量满足需求,会调用一个Arrays.copyof 方法,这个方法是真正实现扩容的步骤。若扩容后的新容量还是不满足要求,则新容量大小为当前所需的容量+1
posted @ 2025-05-14 19:59  kuki'  阅读(24)  评论(0)    收藏  举报