java数组长度固定,删除元素需创建新数组跳过目标索引;推荐用arraylist动态增删;也可手动复制或stream过滤实现。

Java 中数组长度固定,无法直接删除某个索引位置的元素。所谓“删除”,实际是创建一个新数组,跳过目标索引,把其余元素复制过去。
用 ArrayList 代替数组(推荐)
如果需要频繁增删元素,应优先使用 ArrayList,它支持动态调整大小:
- 将原数组转为
ArrayList:List<integer> list = new ArrayList(Arrays.asList(1, 2, 3, 4));</integer> - 调用
remove(int index)删除指定索引元素(注意:会自动收缩) - 如需转回数组:
Integer[] newArr = list.toArray(new Integer[0]);
手动创建新数组(适用于原始类型或不可变场景)
对 int[]、String[] 等,可手动构造少一个元素的新数组:
- 计算新长度:
int newSize = original.length - 1; - 创建新数组:
int[] newArr = new int[newSize]; - 用
System.arraycopy拆分复制:System.arraycopy(original, 0, newArr, 0, index);System.arraycopy(original, index + 1, newArr, index, newSize - index);
使用 Stream(Java 8+,简洁但有开销)
适合一次性操作,代码简短:
- 对对象数组:
String[] arr = {"a","b","c"};String[] result = Arrays.stream(arr).filter((s, i) -> i != 1).toArray(String[]::new);(注意:Stream 不直接支持按索引过滤) - 更稳妥写法(借助 IntStream):
String[] result = IntStream.range(0, arr.length).filter(i -> i != targetIndex).mapToObj(i -> arr[i]).toArray(String[]::new);
注意事项
务必检查索引是否越界(index = array.length),否则抛 ArrayIndexOutOfBoundsException;原始类型数组不能存 null,对象数组删除后对应位置为 null(仅在手动复制时体现)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











