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

Java数组如何添加元素?

在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()(高性能)

适用于对性能敏感的场景(如大数据量)。

Java数组如何添加元素?  第1张

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 一行代码实现添加/插入

重要原则

  1. 数组长度不可变:所有“添加”操作本质是创建新数组。
  2. 优先选择集合类:99% 的场景下 ArrayList 比原始数组更合适。
  3. 性能权衡:小数据量无需优化,大数据量优先选 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)
0