上一篇
如何扩充Java数组?
- 后端开发
- 2025-06-15
- 3789
Java数组长度固定,无法直接扩充,需创建新数组并复制原数据:使用
Arrays.copyOf()
或
System.arraycopy()
手动复制元素,或改用
ArrayList
动态扩容(自动处理)。
方法1:手动创建新数组(基础方法)
// 原数组 int[] oldArray = {1, 2, 3}; int newSize = 5; // 目标长度 // 创建新数组 int[] newArray = new int[newSize]; // 复制原数据 for (int i = 0; i < oldArray.length; i++) { newArray[i] = oldArray[i]; } // 此时newArray = {1, 2, 3, 0, 0}
适用场景:简单小数组操作,适合教学演示。
方法2:Arrays.copyOf()(官方推荐)
import java.util.Arrays; int[] oldArray = {1, 2, 3}; int newSize = 5; // 自动复制并填充默认值 int[] newArray = Arrays.copyOf(oldArray, newSize); // 结果:{1, 2, 3, 0, 0}
优势:
- 代码简洁(一行实现)
- 底层调用
System.arraycopy()
,性能高效 - 自动填充默认值(如
0
、null
)
方法3:System.arraycopy()(底层高性能)
int[] oldArray = {1, 2, 3}; int newSize = 5; int[] newArray = new int[newSize]; // 参数说明:(原数组, 原起始位置, 目标数组, 目标起始位置, 复制的长度) System.arraycopy(oldArray, 0, newArray, 0, oldArray.length); // 结果:{1, 2, 3, 0, 0}
适用场景:
- 大型数组操作(性能最优)
- 需要控制复制位置时(如部分复制)
方法4:改用ArrayList(动态扩容首选)
import java.util.ArrayList; // 创建ArrayList并添加数据 ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); // 自动扩容添加新元素 list.add(4); // 无需手动处理扩容 // 转回数组(可选) Integer[] array = list.toArray(new Integer[0]);
核心优势:
- 自动管理容量(默认扩容1.5倍)
- 提供丰富的API(
add()
,remove()
,get()
) - 避免手动复制代码
方案对比与选型建议
方法 | 性能 | 易用性 | 适用场景 |
---|---|---|---|
手动创建 | 低 | 复杂 | 学习原理 |
Arrays.copyOf() |
高 | 简单 | 快速小规模扩容 |
System.arraycopy |
最高 | 中等 | 大型数据或精确控制复制过程 |
ArrayList |
中等 | 最简单 | 频繁增删元素的动态数据 |
最佳实践:
- 少量数据扩容 → 用
Arrays.copyOf()
- 高性能需求 →
System.arraycopy()
- 频繁增删元素 → 优先选择
ArrayList
引用说明
- Oracle官方文档:Arrays (Java SE 17)
- Oracle官方文档:ArrayList (Java SE 17)
- Java语言规范:数组存储机制
通过合理选择上述方法,可高效解决Java数组扩容问题,对于生产环境,推荐优先使用ArrayList
或Arrays.copyOf()
以保障代码健壮性。