arrays.setall是java.util.arrays中的静态方法,通过intfunction按索引生成数组元素,支持int[]、long[]、double[]及泛型数组,需预先创建数组,性能与循环相当。

Java 中数组初始化不只有 new int[]{1, 2, 3} 或循环赋值一种方式。Arrays.setAll 提供了一种简洁、函数式的方法,特别适合按索引规律生成元素(如平方数、递推序列、随机值等)。
Arrays.setAll 是什么
它是 java.util.Arrays 类中的静态方法,用于将数组的每个元素设置为由给定 IntFunction 生成的值。该函数接收索引(int)作为参数,返回对应位置的元素值。
方法签名:
public static void setAll(int[] array, IntFunction
也支持 long[]、double[] 等基本类型数组,以及泛型对象数组(T[])。
常见用法示例
以下代码展示几种典型场景:
- 填充索引的平方:
int[] squares = new int[5];
Arrays.setAll(squares, i -> i * i); // [0, 1, 4, 9, 16] - 填充偶数序列(从 2 开始):
int[] evens = new int[4];
Arrays.setAll(evens, i -> 2 * (i + 1)); // [2, 4, 6, 8] - 填充随机整数:
int[] randoms = new int[3];
Random rand = new Random();
Arrays.setAll(randoms, i -> rand.nextInt(100)); - 初始化字符串数组:
String[] names = new String[3];
Arrays.setAll(names, i -> "Item-" + (i + 1)); // ["Item-1", "Item-2", "Item-3"]
与传统方式对比
相比 for 循环,setAll 更具表达力和可读性,尤其在逻辑依赖索引时:
- 避免手动维护循环变量和边界检查;
- 天然支持不可变风格(逻辑集中于 lambda 表达式);
- 对多维数组不直接适用——需配合嵌套调用或流处理;
- 注意:数组必须已创建(非 null),否则抛
NullPointerException。
注意事项和限制
不能用于未初始化数组:必须先用 new Type[size] 创建数组实例。
不支持原始类型推断:不能写 Arrays.setAll(new int[3], i -> i) 后再赋给变量——需显式声明数组类型或提前定义变量。
性能接近循环:底层仍是遍历,无额外开销,适合大多数场景;但若逻辑复杂或含阻塞操作,需评估是否影响可维护性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











