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

如何扩充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}

优势

  • 代码简洁(一行实现)
  • 底层调用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}

适用场景

如何扩充Java数组? 第1张

如何扩充Java数组? 第2张

  • 大型数组操作(性能最优)
  • 需要控制复制位置时(如部分复制)


方法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

引用说明

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

如何扩充Java数组? 第3张

0