上一篇
Java数组如何添加元素?
- 后端开发
- 2025-07-02
- 3985
在Java中,数组长度固定,无法直接添加元素,常用两种方法:,1. **创建新数组**:复制原数组并增加新元素,使用
Arrays.copyOf()
或
System.arraycopy()
。,2. **使用ArrayList**:转为
ArrayList
,用
add()
方法添加元素,再转回数组(推荐动态操作)。
方法1:创建新数组并手动复制(基础方法)
适用于少量添加或初学者理解原理。
// 原始数组 int[] original = {1, 2, 3}; int newElement = 4; // 创建新数组(长度+1) int[] newArray = new int[original.length + 1]; // 复制旧数组数据 for (int i = 0; i < original.length; i++) { newArray[i] = original[i]; } // 加入新元素 newArray[newArray.length - 1] = newElement; // 结果:newArray = [1, 2, 3, 4]
优缺点:
- 简单直观,无需额外类库
- 效率低(大量数据时需手动管理复制)
方法2:使用 Arrays.copyOf()
(推荐)
利用Java标准库简化复制过程,适合单次添加。
import java.util.Arrays; int[] original = {1, 2, 3}; int newElement = 4; // 扩展数组长度并复制 int[] newArray = Arrays.copyOf(original, original.length + 1); newArray[newArray.length - 1] = newElement; // 加入新元素 // 结果:newArray = [1, 2, 3, 4]
优化技巧:
- 批量添加时可结合循环,但频繁操作仍影响性能。
方法3:使用 System.arraycopy()
(高性能)
适用于对性能敏感的场景(如大数据量)。
int[] original = {1, 2, 3}; int newElement = 4; int[] newArray = new int[original.length + 1]; // 参数说明:(源数组, 源起始位置, 目标数组, 目标起始位置, 复制长度) System.arraycopy(original, 0, newArray, 0, original.length); newArray[original.length] = newElement; // 加入新元素 // 结果:newArray = [1, 2, 3, 4]
优势:
- 底层实现,复制速度最快
- 灵活控制复制位置(如中间插入元素)
方法4:通过 ArrayList
动态添加(最佳实践)
强烈推荐频繁添加元素的场景。ArrayList
自动扩容,操作更安全高效。
import java.util.ArrayList; import java.util.Arrays; import java.util.List; // 将数组转为ArrayList Integer[] array = {1, 2, 3}; // 需使用包装类型 List<Integer> list = new ArrayList<>(Arrays.asList(array)); // 动态添加元素 list.add(4); // 末尾添加 list.add(0, 0); // 索引0插入新元素 // 转回数组(若需要) Integer[] newArray = list.toArray(new Integer[0]); // 结果:newArray = [0, 1, 2, 3, 4]
关键优势:
- 自动处理扩容,无需手动计算长度
- 支持任意位置插入(
list.add(index, element)
) - ️ 避免数组越界风险
注意:基本类型(如
int
)需用包装类(Integer
),或使用第三方库(如Apache Commons Lang)。
方法5:第三方库(简化代码)
Apache Commons Lang 提供工具类 ArrayUtils
:
import org.apache.commons.lang3.ArrayUtils; int[] original = {1, 2, 3}; int[] newArray = ArrayUtils.add(original, 4); // 末尾添加 // 结果:newArray = [1, 2, 3, 4] // 指定位置插入 int[] insertedArray = ArrayUtils.insert(2, original, 99); // 结果:[1, 2, 99, 3](在索引2插入99)
适用场景:
- 需快速实现添加/插入,且项目已引入该库。
总结与建议
场景 | 推荐方法 | 原因 |
---|---|---|
单次添加 | Arrays.copyOf() |
代码简洁,标准库支持 |
高性能需求 | System.arraycopy() |
底层优化,速度最快 |
频繁动态操作 | ArrayList |
自动扩容,安全灵活 |
简化开发(项目允许) | ArrayUtils |
一行代码实现添加/插入 |
重要原则:
- 数组长度不可变:所有“添加”操作本质是创建新数组。
- 优先选择集合类:99% 的场景下
ArrayList
比原始数组更合适。 - 性能权衡:小数据量无需优化,大数据量优先选
System.arraycopy()
或集合。
若必须使用数组,建议封装工具方法:
public static int[] addElement(int[] array, int element) { int[] newArray = Arrays.copyOf(array, array.length + 1); newArray[array.length] = element; return newArray; }
引用说明:
- Oracle官方文档:Arrays (Java SE 17)
- Apache Commons Lang:ArrayUtils
- Java集合框架指南:ArrayList (Java SE 17)