java数组长度固定,插入需新建数组并复制元素;推荐用arraylist的add()方法;也可用apache commons的arrayutils.insert()简化操作。

Java 数组一旦创建,长度就固定,无法直接在指定位置插入新元素。必须通过创建新数组、复制元素来实现“插入”效果。
手动扩容并移动元素
这是最基础的方式:新建一个比原数组长 1 的数组,把原数组中插入位置前的元素复制过去,新元素放进去,再把插入位置后的所有元素依次后移一位。
- 适用于小规模数据或教学理解
- 注意边界检查(如 index 超出 [0, length] 范围)
- 时间复杂度 O(n),空间复杂度 O(n)
示例代码:
int[] arr = {1, 2, 3, 4};int index = 2; // 在索引 2 处插入(即插在 3 前面)
int newValue = 99;
int[] newArr = new int[arr.length + 1];
// 复制前半部分
System.arraycopy(arr, 0, newArr, 0, index);
// 插入新值
newArr[index] = newValue;
// 复制后半部分(从原数组 index 开始,放到新数组 index+1)
System.arraycopy(arr, index, newArr, index + 1, arr.length - index);
用 ArrayList 替代原始数组
如果需要频繁增删,强烈建议改用 ArrayList —— 它内部封装了自动扩容和元素移动逻辑,调用 add(index, element) 即可。
- 语法简洁:
list.add(2, 99); - 自动处理越界异常(IndexOutOfBoundsException)
- 底层仍是数组,但对开发者透明
注意:ArrayList 存储的是对象,基本类型需用包装类(如 Integer),或使用 int[] 配合第三方库(如 Eclipse Collections)。
使用工具类简化操作(如 Apache Commons Lang)
借助 ArrayUtils.insert() 可一行完成插入,避免手写复制逻辑。
- Maven 依赖:
org.apache.commons:commons-lang3 - 支持基本类型和对象数组
- 内部仍执行扩容+复制,但更健壮(含空值、越界校验)
示例:
int[] arr = {1, 2, 3, 4};int[] newArr = ArrayUtils.insert(2, arr, 99); // 返回新数组
不推荐的做法
试图用反射修改数组长度、或用 Arrays.copyOf() 后强行覆盖 —— 这些方式不可靠,违反 Java 数组语义,容易引发 ArrayStoreException 或逻辑错误。
数组的本质是固定长度容器,插入不是它的设计目标。真正需要动态插入,请转向 ArrayList 或 LinkedList(后者适合频繁中间插入,但随机访问慢)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











