Java数组长度固定,不支持直接部分替换,但可原地更新指定索引范围元素;最简方式是遍历目标区间逐个赋值,需确保索引不越界且新数据长度足够。

Java 中数组本身是固定长度的,不支持直接“部分替换”这种动态操作,但可以通过多种方式实现对指定索引范围内的元素进行修改。关键在于:不是创建新数组,而是原地更新目标位置的值。
直接通过索引批量赋值
最简单的方式是遍历目标下标范围,逐个赋新值。适用于已知起始、结束位置和新值序列的情况。
- 确保索引不越界(0 ≤ start ≤ end < array.length)
- 若用新数组填充,需保证新数据长度 ≥ 替换区间长度
- 示例:将 arr[2] 到 arr[4] 替换为 {10, 20, 30}
int[] arr = {1, 2, 3, 4, 5, 6};
int[] replacements = {10, 20, 30};
int start = 2, end = 4;
for (int i = start; i arr[i] = replacements[i - start];
}
使用 System.arraycopy 进行高效替换
当替换数据来自另一个数组且范围连续时,System.arraycopy 比循环更高效,底层调用的是本地方法。
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 参数顺序:源数组、源起点、目标数组、目标起点、复制长度
- 源和目标可以是同一个数组(实现移动或覆盖)
- 示例:用 src 的前3个元素替换 arr 中索引 1~3 的位置
int[] arr = {1, 2, 3, 4, 5};
int[] src = {100, 200, 300};
System.arraycopy(src, 0, arr, 1, 3); // arr 变为 {1, 100, 200, 300, 5}
结合 Arrays.fill 填充相同值
如果要将某一段替换成同一个值(如清零、标记),用 Arrays.fill 最简洁。
- 只支持填入单一重复值,不适用于不同值的替换
- 支持开区间 [fromIndex, toIndex),注意 toIndex 是不包含的
- 示例:把 arr[2] 到 arr[5](含)都设为 -1
int[] arr = {0, 0, 0, 0, 0, 0, 0};
Arrays.fill(arr, 2, 6, -1); // 实际影响索引 2,3,4,5 → {0,0,-1,-1,-1,-1,0}
封装成可复用的方法
为提升可读性和复用性,可封装一个通用替换方法,处理边界和异常。
- 校验 null、长度、索引合法性,避免运行时异常
- 支持传入新值数组或单个值(重载)
- 返回原数组引用,便于链式调用(如需)
public static void replaceRange(int[] arr, int from, int to, int... values) {
if (arr == null || values == null) throw new IllegalArgumentException();
int len = Math.min(to - from + 1, values.length);
for (int i = 0; i arr[from + i] = values[i];
}
}

















