Array di lunghezza variabile (dinamici) in Java


Mi chiedevo come inizializzare un array intero in modo tale che le sue dimensioni e i suoi valori cambino durante l'esecuzione del mio programma, qualche suggerimento?

Author: Mohammad Sepahvand, 2010-03-11

9 answers

Sì: usa ArrayList.

In Java, gli array "normali" sono di dimensioni fisse. Devi dare loro una dimensione e non puoi espanderli o contrarli. Per cambiare la dimensione, devi creare un nuovo array e copiare i dati che desideri, il che è inefficiente e un problema per te.

Fortunatamente, ci sono tutti i tipi di classi incorporate che implementano strutture dati comuni e anche altri strumenti utili. Ti consigliamo di controllarel'API Java 6 per un elenco completo di essi.

Uno avvertenza: ArrayList può contenere solo oggetti (ad esempio Interi), non primitive (ad esempio ints). Nella MAGGIOR parte dei casi, autoboxing/autounboxing si prenderà cura di questo per te in silenzio, ma potresti avere un comportamento strano a seconda di cosa stai facendo.

 127
Author: Pops, 2013-11-01 22:20:23

Gli array in Java sono di dimensioni fisse. Quello di cui avresti bisogno è un ArrayList, una delle numerose collezioni estremamente preziose disponibili in Java.

Invece di

Integer[] ints = new Integer[x]

Usi

List<Integer> ints = new ArrayList<Integer>();

Quindi per cambiare l'elenco usi ints.add(y) e ints.remove(z) tra molti altri metodi utili che 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 Java-neofiti tendono a cercare di riscrivere se stessi inutilmente.

 38
Author: MattGrommes, 2014-02-03 06:44:16

Gli array sono di dimensioni fisse una volta istanziati. È possibile utilizzare un elenco, invece.

Autoboxing fare una lista utilizzabile simile a un array, si può mettere semplicemente int-valori in esso:

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
 26
Author: Mnementh, 2010-03-11 16:25:44

Non sono d'accordo con le risposte precedenti che suggeriscono ArrayList, perché ArrayListè non 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 IndexOutOfBoundsException perché non c'è ancora alcun elemento in questa posizione anche se l'array di supporto consentirebbe tale aggiunta. Quindi è necessario utilizzare un'implementazione di array estensibile personalizzata come suggerito da @ randy-lance

 12
Author: cspann, 2013-07-01 07:18:57
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]);
}    
}

}

Fonte: Come creare un array dinamico

 11
Author: Anuj Dhiman, 2019-11-28 10:14:00
  1. Si consiglia di utilizzare la lista per affrontare le dimensioni di piccola scala.

  2. Se hai un numero enorme di numeri, MAI usa List e autoboxing,

    Elenco elenco

Per ogni singolo int, viene creato automaticamente un nuovo intero. Lo troverete sempre lento quando la dimensione della lista aumento. Questi interi sono oggetti non necessari. In questo caso, utilizzare una dimensione stimata sarebbe meglio,

int[] array = new int[ESTIMATED_SIZE];
 7
Author: Hao Deng, 2014-12-13 20:58:05

Che ne dici di usare un List invece? Ad esempio, ArrayList<integer>

 4
Author: Konrad Garus, 2010-03-11 16:24:43

Non è possibile modificare la dimensione di un array. È tuttavia possibile creare un nuovo array con la giusta dimensione e copiare i dati dal vecchio array al nuovo.

Ma la tua opzione migliore è usare IntList da jacarta commons. ( qui )

Funziona proprio come una lista ma richiede meno spazio ed è più efficiente di quello, perché memorizza int invece di memorizzare oggetti wrapper su int (questo è ciò che è la classe Integer).

 4
Author: Thiago Chaves, 2013-07-01 04:23:16

Ho risposto a questa domanda e no non hai bisogno di un arraylist o di qualsiasi altra cosa questo era un compito e l'ho completato quindi sì gli array possono aumentare di dimensioni. Ecco il link Come usare Java Dynamic Array ed ecco il link per la mia domanda a cui ho risposto Array dinamici Java

 -4
Author: Nobody, 2017-05-23 11:47:01