Y at-il quelque chose d'aussi rapide que cela en Java? (codage rapide)
int [] a = {1..99};
ou je dois y aller pour ça:
int [] a=new int[100];
for (int i=0;i <100;++i){
a[i]=i;
}
Par curiosité, j'ai testé les performances de deux versions de cette méthode - l'une avec une boucle et l'autre en goyave:
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;
}
Voici les résultats:
Benchmark Mean Mean error Var Units
guava 814.753 46.359 2034.726 nsec/op
loop 79.913 5.671 30.447 nsec/op
La première méthode fonctionne donc en 814 ns +/- 46ns contre 80 ns +/- 5ns pour la seconde. Donc, la boucle est environ 10 fois plus rapide. Si vous appelez cette méthode plusieurs fois, les 800 nanosecondes importent peu. Si vous l’appelez très souvent, l’écriture de la boucle est probablement meilleure.
Depuis Java 8 c'est possible:
int[] a = IntStream.range(1, 100).toArray();
(Et plus court que l’autre réponse Java 8.).
Java 8 permet de faire cela en une ligne avec l'objet IntStream
et l'expression lambda:
int n = 10;
int[] values = new int[n];
IntStream.range(1,n+1).forEach(val -> values[val-1] = val);
Une autre alternative si vous utilisez Java 8:
int[] array = new int[100];
Arrays.setAll(array, i -> i + 1);
L'expression lambda accepte l'index de la cellule et renvoie une valeur à insérer dans cette cellule. Dans ce cas, les valeurs 1 à 100 sont attribuées aux cellules 0 à 99.
en fonction de la taille que vous devrez boucler, si c'est un petit, vous pouvez faire ce qui suit ...
int[] intArray = new int[] {4,5,6,7,8};
je devine pour votre taille, vous ne voulez pas avoir à taper le tout, il est donc logique de créer une boucle et le définir de cette façon
Vous devez utiliser loop pour initialiser un tableau aussi long. Il n'y a pas de méthode de raccourci en Java comme prévu.
Vous pouvez utiliser la bibliothèque Guava pour quelque chose comme ceci:
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;
}
}
Updated: les exemples complets sont tirés de cet article Remplissez les tableaux avec des plages de nombres
Je pense que votre code est le le plus court et le le plus simple moyen. Vous n'aurez peut-être pas besoin de charger des bibliothèques supplémentaires pour obtenir des lignes de code plus "compactes". Les boucles pour sont très simples (vraiment O(n)) et lisibles , les vivent et les aiment.