在java中有没有这么快的东西? (快速编码)
int [] a = {1..99};
或者我必须这样做:
int [] a=new int[100];
for (int i=0;i <100;++i){
a[i]=i;
}
答案 0 :(得分:66)
由于 Java 8 ,这是可能的:
int[] a = IntStream.range(1, 100).toArray();
(并且比其他java 8答案短。)。
答案 1 :(得分:14)
Java 8允许在IntStream
对象和lambda表达式的一行中执行此操作:
int n = 10;
int[] values = new int[n];
IntStream.range(1,n+1).forEach(val -> values[val-1] = val);
答案 2 :(得分: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;
}
结果如下:
Benchmark Mean Mean error Var Units
loop 79.913 5.671 30.447 nsec/op
guava 814.753 46.359 2034.726 nsec/op
因此guava()
方法在814 ns +/- 46ns内运行,而loop()
方法则在80 ns +/- 5ns内运行。所以loop()
的速度提高了约10倍。如果你多次调用那个方法,800纳秒并不重要,如果你经常调用它,写循环可能会更好。
答案 3 :(得分:9)
另一种替代方法,如果您使用Java 8:
int[] array = new int[100];
Arrays.setAll(array, i -> i + 1);
lambda表达式接受单元格的索引,并返回要放入该单元格的值。在这种情况下,单元格0 - 99被赋值为1-100。
答案 4 :(得分:1)
取决于您必须循环的大小,如果它是一个小的,您可以执行以下操作...
int[] intArray = new int[] {4,5,6,7,8};
我猜你的大小你不想要全部输入所以有意义创建一个循环并设置它
答案 5 :(得分:0)
您必须使用循环来初始化这样一个长数组。 Java中没有您所期望的快捷方法。
答案 6 :(得分:0)
您可以使用Guava库,如下所示:
public class Test {
public static void main(String[] args) {
//one liner
int[] array = toArray(newLinkedList(concat(range(1, 10), range(500, 1000))));
//more readable
Iterable<Integer> values = concat(range(1, 10), range(500, 1000));
List<Integer> list = newLinkedList(values);
int[] array = toArray(list);
}
public static List<Integer> range(int min, int max) {
List<Integer> list = newLinkedList();
for (int i = min; i <= max; i++) {
list.add(i);
}
return list;
}
}
已更新:完整示例摘自此帖子Fill arrays with ranges of numbers
答案 7 :(得分:0)
我认为您的代码是最短和最简单方式。您可能不需要加载额外的库来获得更“紧凑”的代码行。 for 循环非常简单(真正的O(n))和易读,生活并且喜欢它们。