Java数组长度固定,无法直接插入或删除元素;推荐用ArrayList实现,调用add(index,element)插入、remove(index)删除,时间复杂度O(n);手动操作需新建数组并复制元素,易出错且不推荐。

Java 中的数组是固定长度的,无法直接在指定索引位置插入或删除元素。要实现这类操作,必须借助可变长度的数据结构(如 ArrayList),或手动复制数组来模拟动态行为。
用 ArrayList 实现插入和删除(推荐)
ArrayList 是最常用、最直观的解决方案,它内部基于数组,但封装了动态扩容、移动元素等逻辑,支持在任意位置高效插入和删除:
-
插入:调用
list.add(index, element),自动将原索引及之后的元素后移一位 -
删除:调用
list.remove(index),自动将后续元素前移填补空位 - 注意:插入/删除中间位置的时间复杂度为 O(n),因为涉及元素移动;但代码简洁、安全、不易出错
示例:
ArrayList<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
list.add(1, "x"); // 在索引1处插入 → ["a", "x", "b", "c"]
list.remove(2); // 删除索引2处元素 → ["a", "x", "c"]
手动操作普通数组(不推荐,仅用于理解原理)
若必须使用原始数组(如题目限制或性能极端敏感场景),需自行处理长度变化和元素搬移:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
插入:创建新数组(长度+1),把原数组
[0, index)拷贝到新数组,写入新元素,再拷贝[index, oldLength)到新数组对应位置 -
删除:创建新数组(长度−1),拷贝
[0, index)和[index+1, oldLength)两段到新数组 - 需手动检查索引越界(
index < 0 || index > array.length插入时允许末尾;删除时要求index < array.length)
替代方案:考虑更合适的集合类型
根据实际需求选择更优结构:
- 频繁在首尾增删 →
LinkedList(O(1) 头尾操作,但随机访问慢) - 需要保持有序且频繁查找/插入 →
TreeSet或TreeMap(自动排序,无重复,不支持重复索引) - 仅需批量构建、极少修改 → 用数组 + 工具类(如
Arrays.copyOf)临时处理
常见误区提醒
避免以下典型错误:
- 试图用
array[index] = value实现“插入”——这只是赋值覆盖,不会改变数组长度或移动其他元素 - 用
System.arraycopy时不调整目标偏移量,导致元素覆盖或空洞 - 忽略
null元素或泛型擦除对类型安全的影响(尤其在删除后取值时)

















