java数组删除元素本质是创建新数组并跳过指定索引,推荐用system.arraycopy分两段复制;频繁操作应改用arraylist。

Java 中的数组是固定长度的,无法直接删除某个索引的元素。所谓“删除”,本质是**创建一个新数组,跳过指定索引位置的元素**,再将原数组中其余元素复制过去。
使用 Arrays.copyOf() 和 System.arraycopy()(推荐)
这是最常用、高效且易懂的方式,适合大多数场景:
- 先创建一个比原数组少 1 个元素的新数组
- 把原数组中索引 0 到 index-1 的元素复制到新数组开头
- 再把原数组中索引 index+1 到末尾 的元素复制到新数组对应位置
示例代码:
int[] arr = {1, 2, 3, 4, 5};
int indexToRemove = 2; // 删除索引为 2 的元素(即值为 3)
<p>if (indexToRemove = arr.length) {
throw new IndexOutOfBoundsException("索引越界");
}</p><p>int[] newArr = new int[arr.length - 1];
// 复制前半部分:[0, indexToRemove)
System.arraycopy(arr, 0, newArr, 0, indexToRemove);
// 复制后半部分:[indexToRemove + 1, end)
System.arraycopy(arr, indexToRemove + 1, newArr, indexToRemove, arr.length - indexToRemove - 1);
// newArr 现在是 {1, 2, 4, 5}</p>使用 ArrayList 作为中间容器(适合频繁操作)
如果需要多次增删,建议改用 ArrayList,它支持动态调整大小:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 将数组转为 ArrayList
- 调用
remove(int index)删除指定索引元素 - 如需返回数组,再用
toArray()转回
示例:
int[] arr = {1, 2, 3, 4, 5};
int indexToRemove = 2;
<p>List<integer> list = new ArrayList(Arrays.asList(
Arrays.stream(arr).boxed().toArray(Integer[]::new)
));
list.remove(indexToRemove); // 自动缩容
int[] newArr = list.stream().mapToInt(Integer::intValue).toArray();
// newArr 是 [1, 2, 4, 5]</integer></p>注意边界和类型问题
实际使用时容易忽略的关键点:
-
索引检查必须做:越界会抛
ArrayIndexOutOfBoundsException -
基本类型数组不能直接转 List:
Arrays.asList(arr)对int[]返回的是含单个元素的 List(该元素是数组对象),不是预期的整数列表 -
字符串数组或对象数组同理:可直接用
Arrays.asList(),但删除后仍需转回数组
不复杂但容易忽略细节,核心就是“避让复制”或“换用可变结构”。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










