MST
星途 面试题库

面试题:Java中ArrayList性能优化之扩容机制相关

请简述Java中ArrayList的扩容机制,以及如何通过设置初始容量来优化其性能?
44.2万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

ArrayList的扩容机制

  1. 初始容量:当创建一个ArrayList对象时,如果没有指定初始容量,默认容量为10。例如ArrayList<Integer> list = new ArrayList<>();,此时其内部数组的初始容量为10。
  2. 容量检查与扩容:当向ArrayList中添加元素时,会先检查当前元素个数是否达到了数组的容量。如果达到了,就会进行扩容。扩容时,新的容量是原来容量的1.5倍(int newCapacity = oldCapacity + (oldCapacity >> 1);,即原容量加上原容量的一半)。然后会创建一个新的数组,其容量为新计算的容量,并将原数组的内容复制到新数组中。例如,当原容量为10,添加第11个元素时,新容量变为15(10 + 10/2),并创建新数组进行数据复制。
  3. 添加大量元素时:如果在短时间内需要添加大量元素,频繁的扩容操作会导致性能开销,因为每次扩容都涉及到数组的复制。

通过设置初始容量优化性能

  1. 场景:如果事先知道大概需要存储的元素数量,可以在创建ArrayList时指定初始容量。例如,预计要存储100个元素,ArrayList<Integer> list = new ArrayList<>(100);
  2. 好处:这样可以避免在添加元素过程中频繁扩容,减少数组复制的开销,从而提高性能。因为直接创建了足够大的内部数组,不需要多次创建新数组和复制数据。