java中Arrays.setAll对性能有什么影响?

Rub*_*ira 2 java

我创建了一个简单地填充 Integer[] 对象数组的方法,我想知道使用内置 Java 方法 Arrays.setAll 是否会有性能差异:

private static Integer generate_number(){
    return random.nextInt(9000);
}
    
public static void fill_array_with_randNumbers(Integer[] array){
    Arrays.setAll(array, i -> generate_number());
}
Run Code Online (Sandbox Code Playgroud)

并以旧时尚的方式进行:

private static Integer generate_number(){
    return random.nextInt(9000);
}

public static void fill_array_with_randNumbers(Integer[] array){
    for(int i = 0; i < array.length; i++) {
        array[i] = generate_number();
    }
}
Run Code Online (Sandbox Code Playgroud)

Huy*_*yen 5

不,如果你检查Arrays的java源代码,没有什么区别。它还使用循环来设置变量。

/**
  * @param <T> type of elements of the array
  * @param array array to be initialized
  * @param generator a function accepting an index and producing the desired
  *        value for that position
  * @throws NullPointerException if the generator is null
  * @since 1.8
  */
public static <T> void setAll(T[] array, IntFunction<? extends T> generator) {
    Objects.requireNonNull(generator);
    for (int i = 0; i < array.length; i++) {
         array[i] = generator.apply(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/util/Arrays.java