用1,2 ... n填充数组的最短方法

C g*_*ics 29 java arrays

在java中有没有这么快的东西?(快速编码)

int [] a = {1..99};
Run Code Online (Sandbox Code Playgroud)

或者我必须这样做:

int [] a=new int[100];
for (int i=0;i <100;++i){
a[i]=i;
}
Run Code Online (Sandbox Code Playgroud)

Bac*_*chi 73

Java 8开始,这是可能的:

int[] a = IntStream.range(1, 100).toArray();
Run Code Online (Sandbox Code Playgroud)

(并且比其他java 8答案短.).

  • 要清楚,这将创建一个包含99个元素的数组. (6认同)
  • `.rangeClosed` 方法包含在内,将数组填充为 100 个元素 `int[] a = IntStream.rangeClosed(1, 100).toArray();` https://docs.oracle.com/javase/8/docs /api/java/util/stream/IntStream.html (2认同)

cha*_*hao 14

Java 8允许使用IntStreamobject和lambda表达式在一行中执行此操作:

int n = 10;
int[] values = new int[n];
IntStream.range(1,n+1).forEach(val -> values[val-1] = val);
Run Code Online (Sandbox Code Playgroud)


ass*_*ias 13

出于好奇,我测试了该方法的两个版本的性能 - 一个使用循环,另一个使用guava:

public int[] loop() {
    int[] a = new int[100];
    for (int i = 0; i < 100; ++i) {
        a[i] = i;
    }
    return a;
}

public int[] guava() {
    Set<Integer> set = ContiguousSet.create(Range.closed(0, 99), DiscreteDomains.integers());
    int[] a = Ints.toArray(set);
    return a;
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

Benchmark     Mean     Mean error          Var    Units
loop        79.913          5.671       30.447  nsec/op
guava      814.753         46.359     2034.726  nsec/op
Run Code Online (Sandbox Code Playgroud)

因此,第一种方法在814 ns +/- 46ns内运行,而第二种方法在80 ns +/- 5ns内运行.因此循环速度提高了约10倍.如果你多次调用该方法,800纳秒无关紧要,如果你经常调用它,写循环可能会更好.


Man*_*dis 9

如果您使用Java 8,另一种选择:

int[] array = new int[100];
Arrays.setAll(array, i -> i + 1);
Run Code Online (Sandbox Code Playgroud)

lambda表达式接受单元格的索引,并返回要放入该单元格的值.在这种情况下,单元格0-99被赋值为1-100.

  • 与接受的答案相比,其性能如何? (2认同)