当前位置:首页 > 后端开发 > 正文

如何扩充Java数组?

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}

优势

如何扩充Java数组?  第1张

  • 代码简洁(一行实现)
  • 底层调用System.arraycopy(),性能高效
  • 自动填充默认值(如0null

方法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 中等 最简单 频繁增删元素的动态数据

最佳实践

  1. 少量数据扩容 → 用Arrays.copyOf()
  2. 高性能需求 → System.arraycopy()
  3. 频繁增删元素 → 优先选择ArrayList

引用说明

  • Oracle官方文档:Arrays (Java SE 17)
  • Oracle官方文档:ArrayList (Java SE 17)
  • Java语言规范:数组存储机制

通过合理选择上述方法,可高效解决Java数组扩容问题,对于生产环境,推荐优先使用ArrayListArrays.copyOf()以保障代码健壮性。

0