Mi chiedevo come inizializzare un array intero in modo tale che le sue dimensioni ei valori cambino durante l'esecuzione del mio programma, qualche suggerimento?
Mi chiedevo come inizializzare un array intero in modo tale che le sue dimensioni ei valori cambino durante l'esecuzione del mio programma, qualche suggerimento?
Risposte:
Sì: usa ArrayList .
In Java, gli array "normali" sono di dimensione fissa. Devi dare loro una dimensione e non puoi espanderli o contrarli. Per modificare le dimensioni, devi creare un nuovo array e copiare i dati desiderati, il che è inefficiente e un problema per te.
Fortunatamente, ci sono tutti i tipi di classi incorporate che implementano strutture di dati comuni e anche altri strumenti utili. Ti consigliamo di controllare l'API Java 6 per un elenco completo di essi.
Un avvertimento: ArrayList può contenere solo oggetti (es. Numeri interi), non primitive (es. Int). Nella MAGGIOR PARTE dei casi, l' autoboxing / autounboxing si prenderà cura di questo per te in silenzio, ma potresti ottenere un comportamento strano a seconda di ciò che stai facendo.
size
mentre il programma va avanti; ottiene qualsiasi dimensione si trovi size
quando quella riga viene eseguita.
null
alla fine. Qualche idea sul perché?
Gli array in Java hanno dimensioni fisse. Quello che ti serve è un ArrayList, una delle numerose collezioni estremamente preziose disponibili in Java.
Invece di
Integer[] ints = new Integer[x]
usate
List<Integer> ints = new ArrayList<Integer>();
Quindi, per cambiare l'elenco che usi ints.add(y)
e ints.remove(z)
tra molti altri metodi utili puoi trovare nei Javadoc appropriati.
Consiglio vivamente di studiare le classi Collections disponibili in Java in quanto sono molto potenti e offrono molte funzionalità integrate che i novellini di Java tendono a provare a riscrivere se stessi inutilmente.
List<Integer>
invece di ArrayList<Integer>
?
Gli array hanno una dimensione fissa una volta istanziati. Puoi invece usare un elenco.
L'autoboxing rende un List utilizzabile simile a un array, puoi inserire semplicemente valori int:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Non sono d'accordo con le risposte precedenti che suggeriscono ArrayList
, perché nonArrayList
è un array dinamico ma un elenco supportato da un array. La differenza è che non puoi fare quanto segue:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
Ti darà un'eccezione IndexOutOfBoundsException perché non c'è ancora alcun elemento in questa posizione anche se l'array di supporto consentirebbe tale aggiunta. Quindi è necessario utilizzare un'implementazione Array estensibile personalizzata come suggerito da @ randy-lance
Simple code for dynamic array. In below code then array will become full of size we copy all element to new double size array(variable size array).sample code is below
public class DynamicArray {
static int []increaseSizeOfArray(int []arr){
int []brr=new int[(arr.length*2)];
for (int i = 0; i < arr.length; i++) {
brr[i]=arr[i];
}
return brr;
}
public static void main(String[] args) {
int []arr=new int[5];
for (int i = 0; i < 11; i++) {
if (i<arr.length) {
arr[i]=i+100;
}
else {
arr=increaseSizeOfArray(arr);
arr[i]=i+100;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println("arr="+arr[i]);
}
}
}
Si consiglia di utilizzare List per gestire dimensioni ridotte.
Se hai un numero enorme di numeri, non usare MAI List e l'autoboxing,
Elenco <Intero> elenco
Per ogni singolo int, viene creato automaticamente un nuovo Integer. Troverai che rallenta quando la dimensione dell'elenco aumenta. Questi numeri interi sono oggetti non necessari. In questo caso, sarebbe meglio utilizzare una taglia stimata,
int[] array = new int[ESTIMATED_SIZE];
Che ne dici di usare List
invece un ? Per esempio,ArrayList<integer>
Non è possibile modificare la dimensione di un array. Tuttavia, è possibile creare un nuovo array con le dimensioni corrette e copiare i dati dal vecchio array al nuovo.
Ma la tua migliore opzione è usare IntList da jacarta commons. ( qui )
Funziona proprio come un List, ma occupa meno spazio ed è più efficiente di così, perché memorizza gli int invece di memorizzare gli oggetti wrapper sugli int (ecco cos'è la classe Integer).
Ho risposto a questa domanda e no, non è necessario un elenco di elenchi o qualsiasi altra cosa, questo era un compito e l'ho completato in modo che gli array possano aumentare di dimensioni. Ecco il link Come usare Java Dynamic Array e qui è il link per la mia domanda a cui ho risposto agli array Java Dynamic
int[] array = new int[size];
size
è una variabile, ma la lunghezza di un array deve essere corretta, ho ragione? @Lord Torgamus