Java数组长度固定,无法直接移动元素,需通过复制、平移或替换实现;常见场景包括元素位移、插入新元素、交换位置,推荐使用ArrayList简化操作。

Java 中数组本身是固定长度的,不能直接“移动元素到指定位置”,但可以通过复制、替换或重新排列实现类似效果。关键在于明确需求:是插入新元素、调整已有元素顺序,还是把某个元素“挪”到索引 i 处(其他元素相应平移)?下面分几种常见场景说明。
把某个元素移到指定索引位置(其余元素自动平移)
例如:数组 [1, 2, 3, 4, 5],想把元素 4 移到索引 1 的位置,结果变成 [1, 4, 2, 3, 5]。这需要先取出目标元素,再将中间一段整体右移或左移。
- 先用循环或
System.arraycopy搬移受影响的区间 - 若目标位置在原位置右侧(如从索引 3 → 1),需左移中间元素;若在左侧(如从 1 → 3),需右移中间元素
- 最后把原元素填入目标位置
在指定位置插入新元素(模拟动态扩容)
原数组无法插入,需创建新数组:
- 新数组长度 = 原长度 + 1
- 用
System.arraycopy把原数组中位置index之前的部分复制到新数组相同位置 - 把新元素放入新数组的
index位置 - 再把原数组中
index及之后的元素复制到新数组的index+1开始处
仅交换两个位置的元素(最简单“移动”)
如果只是想让某元素出现在某位置,且不介意另一个元素去它原来的位置,直接交换即可:
立即学习“Java免费学习笔记(深入)”;
- 用临时变量或异或技巧交换
arr[i]和arr[j] - 时间复杂度 O(1),无需额外空间
- 适用于排序、轮换等场景
使用 ArrayList 替代数组(推荐日常开发)
数组的“移动”操作繁琐易错,实际开发中更常用 ArrayList:
-
list.add(index, element)直接在指定位置插入 -
list.remove(index)删除后,后续元素自动前移 -
Collections.swap(list, i, j)快速交换 - 底层仍基于数组,但封装了移动逻辑,安全且简洁


















