java数组如何扩容
Java数组扩容方法
Java中的数组是固定长度的,无法直接扩容。但可以通过以下几种方式实现类似扩容的效果:
使用Arrays.copyOf方法
int[] originalArray = {1, 2, 3};
int newSize = 5;
int[] newArray = Arrays.copyOf(originalArray, newSize);
此方法会创建一个新数组,并将原数组内容复制到新数组中。新数组长度可以指定,多余位置会用默认值填充。

手动创建新数组并复制
int[] originalArray = {1, 2, 3};
int[] newArray = new int[originalArray.length * 2]; // 通常扩容为原来的2倍
System.arraycopy(originalArray, 0, newArray, 0, originalArray.length);
System.arraycopy方法效率较高,参数依次为:源数组、源起始位置、目标数组、目标起始位置、复制长度。

使用ArrayList代替数组
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
list.add(4); // 自动扩容
int[] array = list.stream().mapToInt(i->i).toArray();
ArrayList内部实现了自动扩容机制,适合需要频繁扩容的场景。最后可以转换为数组。
使用List的toArray方法
List<Integer> list = new ArrayList<>();
for(int i=0; i<3; i++) {
list.add(i);
}
Integer[] array = list.toArray(new Integer[0]);
这种方式先将元素存入List,再转换为数组。参数new Integer[0]用于指定返回数组类型。
注意事项
- 数组扩容实际上是创建新数组并复制数据的过程,会有性能开销
- 频繁扩容会影响性能,建议预估容量或按倍数扩容(如2倍)
- 基本类型数组和对象数组扩容方式相同,但要注意类型匹配
- 使用集合类如ArrayList通常比直接操作数组更方便






