C'è qualcosa di così veloce in Java? (Rapido nella codifica)Il modo più semplice per riempire un array con 1,2 ... n
int [] a = {1..99};
o devo andare per questo:
int [] a=new int[100];
for (int i=0;i <100;++i){
a[i]=i;
}
C'è qualcosa di così veloce in Java? (Rapido nella codifica)Il modo più semplice per riempire un array con 1,2 ... n
int [] a = {1..99};
o devo andare per questo:
int [] a=new int[100];
for (int i=0;i <100;++i){
a[i]=i;
}
Per curiosità, ho provato le prestazioni di due versioni di questo metodo - uno con un ciclo e l'altro utilizzando 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;
}
Ecco i risultati:
Benchmark Mean Mean error Var Units
guava 814.753 46.359 2034.726 nsec/op
loop 79.913 5.671 30.447 nsec/op
Quindi il primo metodo viene eseguito in 814 ns +/- 46 ns contro 80 ns +/- 5 ns per il secondo. Quindi il ciclo è circa 10 volte più veloce. Se chiami quel metodo un paio di volte, gli 800 nanosecondi non contano, se lo chiami molto spesso, scrivere il ciclo è probabilmente meglio.
a seconda delle dimensioni si dovrà loop, se uno piccolo è possibile effettuare le seguenti ...
int[] intArray = new int[] {4,5,6,7,8};
im indovinare per il vostro formato non volete dover digitare tutto fuori quindi ha senso per creare un ciclo e impostare in questo modo
È necessario utilizzare il ciclo per inizializzare un array così lungo. Non esiste un metodo di scelta rapida in Java come previsto.
È possibile utilizzare libreria di Guava, per qualcosa di simile:
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;
}
}
Aggiornato: completo esempio prendere da questo post Fill arrays with ranges of numbers
Penso che il codice è il più breve e il modo più semplice . Potrebbe non essere necessario caricare librerie aggiuntive per ottenere più linee di codice "compatte". I loop per sono molto semplici (veramente O (n)) e leggibili, vivono e li amo.
Java 8 permette di farlo in una linea con IntStream
oggetto e lambda espressione:
int n = 10;
int[] values = new int[n];
IntStream.range(1,n+1).forEach(val -> values[val-1] = val);
Arrays.setAll() è un modo molto migliore – Arkadiy
Un'altra alternativa, se si utilizza Java 8:
int[] array = new int[100];
Arrays.setAll(array, i -> i + 1);
L'espressione lambda accetta l'indice della cella, e restituisce un valore da mettere in quella cella. In questo caso, alle celle da 0 a 99 vengono assegnati i valori 1-100.
Qual è la performance di questo rispetto alla risposta accettata? – Fabian
È necessario il ciclo Ho paura ... – assylias
possibile duplicato http: // StackOverflow.it/questions/9128737/modo più veloce per impostare tutti i valori di un array –
Dai un'occhiata a questa domanda: http://stackoverflow.com/questions/3790142/java-equivalent-of-pythons -rangeint-int –