Gli array sono collezioni indicizzate di elementi dello stesso tipo. In molti linguaggi, questi vettori occupano memoria contigua e offrono un accesso per indice molto veloce. Capire come dichiararli, iterarli e confrontarli con strutture come liste o ArrayList aiuta a scrivere codice più chiaro ed efficiente.

In breve: un array è una sequenza a dimensione fissa con elementi omogenei e indicizzati. Si dichiara specificando tipo e lunghezza, si accede per indice, si itera con for o foreach. È ideale per dati stabili e accessi veloci; per misura variabile preferisci strutture dinamiche.

Come si dichiara un array in Java?

In poche parole, un array in Java rappresenta una struttura a dimensione fissa per elementi omogenei, ad esempio interi.

Qual è la differenza tra array e ArrayList?

La differenza tra array e ArrayList riguarda soprattutto la dimensione: gli array hanno lunghezza fissa, mentre ArrayList cresce o diminuisce dinamicamente. Cambiano anche i metodi disponibili e i costi delle operazioni più comuni.

Se sai già quanti elementi avrai e devi accedervi rapidamente per indice, gli array sono una scelta naturale. Quando invece la collezione deve crescere, rimuovere spesso o cambiare frequenza d’accesso, un contenitore dinamico come ArrayList è più flessibile.

In pratica, la differenza tra array e ArrayList si traduce in vincoli e libertà: gli array vincolano la misura ma offrono prevedibilità; le liste dinamiche offrono flessibilità con un piccolo costo di gestione.

Passaggi essenziali sugli array

  • Dichiara il tipo e il nome.
  • Alloca la lunghezza o inizializza i valori.
  • Accedi tramite indice a partire da zero.
  • Itera con for o foreach.
  • Verifica i limiti per evitare errori.
  • Scegli array o ArrayList secondo il caso.

Quali tipi e valori possono contenere?

Gli array contengono elementi dello stesso tipo:

Diagramma di array monodimensionale di interi in linguaggio C
Diagramma di un array monodimensionale di interi in C. · Tropwine · CC BY 4.0 · 1d integer array diagram.svg

possono essere primitivi (ad esempio interi, float, boolean) oppure oggetti (stringhe, istanze di classi). La scelta del tipo guida memoria, prestazioni e validità delle operazioni.

Tipi primitivi e oggetti

Con tipi primitivi, ogni cella conserva direttamente il valore; con oggetti, la cella contiene riferimenti. Questo influisce su confronti, inizializzazione e copie. Esempi Java:

<pre><code>// Primitivi int[] numeri = new int[3]; // [0, 0, 0] float[] misure = {1.5f, 2.0f}; // [1.5, 2.0] // Oggetti String[] nomi = new String[]{"Ada", "Linus"}; Object[] mix = new Object[2]; // [null, null] </code></pre>

Inizializzazione e valori di default

In Java, gli array hanno sempre una lunghezza nota e non modificabile. I valori di default sono 0 per numerici, false per boolean, null per riferimenti. Esempio di inizializzazione esplicita e accesso:

<pre><code>int[] v = new int[4]; v[0] = 42; // scrittura int x = v[0]; // lettura int n = v.length; // lunghezza </code></pre>

In Java, un array è un oggetto che contiene un numero fisso di valori dello stesso tipo.

Video che mostra l'uso di Eclipse IDE per programmare in Java. · Guoyunhebrave · CC BY-SA 3.0 · Wikibooks Java Hello Wikibooks.ogv
Oracle — The Java Language Specification, §10 Arrays. Translated from English.
Mostra testo originale

An array is a container object that holds a fixed number of values of a single type.

Iterazione con for e foreach

Puoi scorrere gli elementi con il classico for usando l’indice, oppure con foreach per una sintassi più leggibile. Esempi Java:

<pre><code>int[] dati = {3, 5, 8}; // for con indice for (int i = 0; i < dati.length; i++) { System.out.println(dati[i]); } // foreach (enhanced for) for (int valore : dati) { System.out.println(valore); } </code></pre>

Il foreach è più conciso; se devi modificare le posizioni o usare l’indice corrente, il for tradizionale resta la scelta migliore. Ricorda: scrivere oltre i limiti genera errori in tempo di esecuzione.

Prestazioni, memoria ed errori comuni

Gli array sono semplici e prevedibili: supportano accessi indicizzati rapidi e occupano uno spazio contiguo in memoria. Sono però rigidi nella dimensione e possono esporre errori se l’indicizzazione non è gestita con cura. Gli array multidimensionali offrono matrici e tabelle, ma possono aumentare l’impronta di memoria.

In C++ esiste std::array, un contenitore a misura fissa con memoria contigua e dimensione nota a compile-time.

  • Accesso indicizzato veloce. Gli array forniscono in genere complessità di accesso O(1) perché basta calcolare l’indirizzo base più l’offset. È ideale quando leggi spesso e scrivi di rado.
  • Scritture prevedibili. La scrittura è immediata sull’indice desiderato. Se modifichi frequentemente, valuta il pattern di accesso per ridurre cache miss e mantenere le prestazioni.
  • Dimensione fissa. Una volta creato, un array non può cambiare lunghezza. Per collezioni molto dinamiche usa una struttura ridimensionabile come ArrayList, tenendo conto dei suoi costi.
  • Out of bounds. Un indice negativo o maggiore/uguale alla lunghezza causa errori a runtime. Proteggi sempre gli accessi confrontando con <code>length</code> o validando in anticipo.
  • Copie e alias. Copiare il riferimento non duplica il contenuto: due variabili possono puntare allo stesso array. Per copiare i dati crea un nuovo array e trasferisci gli elementi.
  • Tipi e boxing. Con oggetti (ad esempio <code>Integer[]</code>) considera il costo di boxing/unboxing rispetto a <code>int[]</code>. In cicli intensivi, preferisci i tipi primitivi per meno overhead.
  • Cache e contiguità. La contiguità aiuta la cache della CPU. Accessi sequenziali sono più rapidi di pattern casuali; ordina i dati per sfruttare la località.
  • Multi-dimensione. Un <code>int[][]</code> può essere “raggiera” (righe di lunghezze diverse). Tieni conto di layout e overhead di puntatori se lo confronti con strutture lineari.

Nel complesso, gli array eccellono quando servono prevedibilità, memoria compatta e letture frequenti. Quando la dimensione muta spesso o servono molte operazioni di inserimento in mezzo, una struttura dinamica è più pratica.

Domande frequenti

Posso cambiare la lunghezza di un array dopo la creazione?

No. La lunghezza è definita all’allocazione. Per “cambiare taglia” crea un nuovo array e copia i dati, oppure usa una struttura dinamica come ArrayList.

Perché ottengo IndexOutOfBoundsException?

Stai accedendo a un indice negativo o non esistente. Verifica sempre che 0 ≤ indice < length prima di leggere o scrivere. Un controllo semplice evita errori a runtime.

Gli array possono contenere tipi diversi?

No, un array è omogeneo. In Java, un <code>Object[]</code> può contenere istanze diverse perché il tipo è comune, ma richiede cast e attenzione al tipo reale.

foreach modifica gli elementi?

Il foreach itera in sola lettura dell’indice; puoi comunque assegnare a variabili temporanee. Per sostituire valori in posizione specifica, usa un for con indice.

Quando è meglio usare ArrayList?

Quando inserimenti e rimozioni sono frequenti o la dimensione cambia spesso. ArrayList gestisce automaticamente la capacità, a fronte di un piccolo overhead rispetto a un array.

Punti chiave finali

  • Un array memorizza elementi omogenei con dimensione fissa.
  • Accesso O(1) e iterazione con for/foreach.
  • Scegli ArrayList per crescite frequenti.
  • Conosci tipi, default e limiti.
  • Evita errori di indice e copia.

Gli array restano una delle strutture dati più affidabili e comprensibili. Offrono prevedibilità, ottime prestazioni sugli accessi e un modello mentale semplice. Se accompagni questa base con buone pratiche sugli indici, sulla scelta dei tipi e sui pattern di iterazione, otterrai codice più leggibile e meno soggetto a errori.

Quando progetti, chiediti: la dimensione è stabile e l’accesso per indice è prioritario? Se sì, l’array è spesso la soluzione più solida. Se invece prevalgono inserimenti e rimozioni, valuta contenitori dinamici. In entrambi i casi, sperimenta con piccoli esempi e verifica i risultati con test mirati.

Quest'articolo è stato scritto a titolo esclusivamente informativo e di divulgazione. Per esso non è possibile garantire che sia esente da errori o inesattezze, per cui l’amministratore di questo Sito non assume alcuna responsabilità come indicato nelle note legali pubblicate in Termini e Condizioni
Quanto è stato utile questo articolo?0Vota per primo questo articolo!