Arrays.fill 不能生成递增序列,因其仅支持批量赋相同值;正确方式是用 for 循环、IntStream.range 或 ArrayUtils.setAll 等支持按索引计算的方案。

Arrays.fill 本身不能生成递增序列数组,它只能把数组所有元素设为同一个值。想用它直接生成 0,1,2,3… 这样的递增序列,是行不通的。
为什么 Arrays.fill 不适合递增序列
Arrays.fill 的设计目标是批量赋相同值,比如把 int[] arr 全部填成 5:
Arrays.fill(arr, 5);
它没有提供“按索引自动计算值”的机制。递增序列每个位置的值都不同(arr[i] = i),必须逐个赋值或借助其他逻辑。
正确生成递增序列的常用方式
以下方法更直接、高效,且符合实际开发习惯:
-
for 循环最直观:适合任何起始值和步长
for (int i = 0; i -
IntStream.range 一行搞定(Java 8+):
int[] arr = IntStream.range(0, n).toArray();
若需从 1 开始: IntStream.rangeClosed(1, n).toArray() -
使用 Apache Commons Lang(第三方):
ArrayUtils.setAll(arr, i -> i);
或指定起始值:ArrayUtils.setAll(arr, i -> start + i * step);
如果非要结合 Arrays.fill,只能分段模拟
这不是推荐做法,仅作技术说明:比如生成 [0,0,1,1,2,2] 这类重复递增序列,可先 fill 某段,再手动改后续段。但纯递增序列无意义叠加 fill,反而增加复杂度和出错风险。
实战小建议
写工具方法时,优先封装清晰逻辑,而不是硬套 Arrays.fill:
- 需要 0 到 n-1:直接用 IntStream.range(0, n).toArray()
- 需要自定义起始/步长:写个简单循环或用 IntStream.iterate
- 性能敏感场景(如大数组),for 循环通常比 Stream 略快,且内存更可控

















