Array in Java

Introduzione
Obiettivo di questa dispensa è mostrare quali sono gli strumenti offerti dal linguaggio Java per creare e manipolare array.

Array in Java
Un array è una struttura che contiene dati dello stesso tipo base. L’utilizzo di array in Java prevede che siano svolte, nell’ordine, due importanti operazioni: la dichiarazione e la creazione. La dichiarazione di una variabile di tipo array ha la seguente sintassi: tipo_base[] id_variabile; Esempi int[] a; double[] b; String[] c;

dichiara una variabile array di nome a il cui tipo base è int dichiara una variabile array di nome b il cui tipo base è double dichiara una variabile array di nome c il cui tipo base è String

La creazione dell’array dichiarato avviene mediante la seguente sintassi: id_variabile = new tipo_base [dim]; dove new è uno speciale operatore di Java, il cui significato sarà spiegato tra poco, e dim è un intero che indica la dimensione dell’array. Esempi a=new int[10]; b=new double[6]; c=new String[2]; Sintassi abbreviata tipo_base[] id_variabile = new tipo_base [dim]; Esempi int[] a=new int[10]; double[] b=new double[6]; String[] c=new String[2]; Sintassi alternativa Le parentesi quadrate possono essere spostate dopo il nome dell’array. Questa sintassi è scarsamente usata. Esempi int a[]=new int[10]; double b[]=new double[6]; String c[]=new String[2]; crea un array che può contenere 10 interi crea un array che può contenere 6 double crea un array che può contenere 2 stringhe

Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/11

1

Confronti con i dati primitivi
Le domande che potete porvi sono: - Come mai per usare una variabile array non basta dichiararla, come avviene invece per le variabili di tipo primitivo, ma è necessario anche crearla esplicitamente? - Che differenza esiste tra dichiarazione e creazione? La dichiarazione di una variabile di tipo primitivo, per esempio int x; indica che, in fase di esecuzione, avremo bisogno di uno spazio in memoria dove conservare il valore di tale variabile e che lo spazio di memoria richiesto è di 32 bit. La dichiarazione di una variabile array, per esempio int[] x; indica che, in fase di esecuzione, avremo bisogno di uno spazio in memoria dove conservare il riferimento all’array che andremo a creare successivamente. Pertanto x non contiene un valore, bensì un indirizzo di memoria. Le variabili che contengono indirizzi di memoria vengono dette, in Java, variabili reference (riferimento) e lo spazio occupato dipende dalla piattaforma in uso. In altri linguaggi di programmazione, le variabili destinate a contenere indirizzi, sono dette tipicamente puntatori. Entrambi i termini sono giustificati dal fatto che la variabile reference “fa riferimento” o “punta” alla struttura contenente effettivamente i valori. Per default, il valore iniziale di una variabile reference è NULL, intendendo con questo che la variabile “punta a nulla”.

x:

NULL

L’operatore new
La creazione della struttura array, contenente i valori del tipo base, avviene utilizzando l’operatore new. Volendo creare l’array x (ossia “puntato da x”) di interi, dichiarato in precedenza, e supponendo che la sua dimensione sia 5, dobbiamo scrivere: x= new int[5]; Solo dopo l’esecuzione di questa istruzione avremo effettivamente a disposizione l’array. Il valore di x non è più NULL ma coincide con l’indirizzo di memoria del primo elemento dell’array.

Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/11

2

x:

0

1

2

3

4

indici

Osservazioni

1. Spesso, al posto della costante esplicita che indica la dimensione dell’array, si
usa una costante simbolica, che sarà per ovvi motivi di tipo intero: final int DIM= 5; int[] x= new int[DIM]; Una volta fissata la dimensione di un array, non è più possibile modificarla in fase di esecuzione. Per questo motivo si dice che gli array sono strutture di memoria statiche, intendendo con questo che la dimensione fissata non può più variare.

2. Un array mantiene al suo interno l’informazione della sua dimensione. Per
richiamare questa informazione si fa seguire al nome dell’array un punto e la parola length. Per esempio: x.length restituisce il valore 5. intero, con la differenza che non ha un nome proprio. Per riferirci ad uno di questi elementi occorre scrivere il nome dell’array seguito, tra parentesi quadrate, dall’indice che ne indica la posizione occupata nella struttura. Per esempio, per accedere al primo elemento (indice 0) si scrive x[0]; per accedere al secondo elemento si scrive x[1] e così via. In generale, la notazione usata per accedere all’elemento di indice i (i=0,1,2…,DIM) è: x[i] 4. Gli indici di un array in Java partono sempre da zero e vanno fino a DIM-1.

3. Ogni elemento dell’array x si comporta esattamente come una variabile di tipo

Inizializzazione di un array
L’inizializzazione di un array (detta anche valorizzazione) consiste nell’assegnare a ciascun elemento dell’array un valore iniziale. L’ operazione è indispensabile per poter lavorare con variabili di questo tipo, così come è necessario assegnare un valore iniziale ad ogni variabile di tipo primitivo, prima di poterla utilizzare. Se l’array contiene pochi elementi (come nel nostro esempio) possiamo assegnare direttamente ad ogni elemento il corrispondente valore. Per esempio, per inizializzare l’array come indicato in figura

Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/11

3

x:

100 0

50 1

81 2

23 3

7 4

indici

scriveremo: x[0]= x[1]= x[2]= x[3]= x[4]= 100; 50; 81; 23; 7;

Una notazione alternativa, utilizzabile quando i valori dell’array siano noti in partenza e non debbano essere acquisiti in input, consiste nel valorizzare l’array in fase di dichiarazione: int[] x= {100, 50, 81, 23, 7}; Osservate che, in questo caso, non è più necessario creare l’array con l’operatore new. Se non è necessario mantenere il riferimento all’array in una variabile, si può definire un array anonimo con la seguente sintassi: new int[] {100, 50, 81, 23, 7}; Osservazione Le soluzioni presentate sono valide solo se la dimensione dell’array è limitata. Infatti, immaginate quali potrebbero essere le difficoltà se l’array da inizializzare contenesse un numero elevato di elementi (es. superiore a 100). Nel seguito vedremo come sia possibile risolvere questo problema attraverso l’uso di cicli con contatore.

Quest'opera è stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/11

4