Array Attenzione: nella definizione della variabile
¨ Lo strumento messo a disposizione dal oggetto devono essere presenti le parentesi
linguaggio Java (e in molti altri linguaggi di quadre, ma NON deve essere indicata la
programmazione) per memorizzare una dimensione dell’array; la variabile potrà riferirsi
array
sequenza di dati si chiama (che significa solo ad array di quel tipo, ma di qualunque
“schiera” o “sequenza ordinata”) dimensione
un oggetto
¨ In Java, un array è che
una sequenza posizionale di
rappresenta
dati omogenei (cioè tutti dello stesso tipo), una
Una variabile x che si riferisce a un array è
che vengono detti elementi o componenti variabile oggetto che contiene un
dell’array riferimento all’oggetto array
Costruire un array Utilizzare un array
¨ Un array in Java è un oggetto ¨ Al momento della costruzione, tutti gli
¤ Come ogni oggetto*, deve essere costruito elementi dell’array vengono inizializzati a un
con l’operatore new, dichiarando il tipo di dati le stesse regole viste per
valore, seguendo
che potrà contenere le variabili di esemplare prive di
inizializzazione esplicita
¨ Nella costruzione il tipo di dati è seguito da
una coppia di parentesi quadre che ¨ Si accede al contenuto di una cella dell’array
contiene la dimensione dell’array, cioè il indicando tra parentesi la posizione voluta
numero di elementi che potrà contenere ¨ Il numero utilizzato per accedere a un
¨ In Java, le parentesi quadre si usano solo particolare elemento dell’array si chiama
per gli array indice
Il tipo di dati di un array può essere qualsiasi ¨ L’indice può assumere un valore compreso tra
tipo di dati valido in Java incluso
0 ( ) e la dimensione dell’array
esclusa
( ), cioè segue le stesse convenzioni
viste per le posizioni dei caratteri in una stringa
¤ il primo elemento ha indice 0
dimensione
¤ l’ultimo elemento ha indice ( - 1)
¨ A tutti gli effetti sintattici e semantici,
un elemento di un array equivale a una
singola variabile dello stesso tipo
Cosa succede se si accede a un elemento
dell’array usando un indice sbagliato (maggiore
o uguale alla dimensione, o negativo) ?
¤ L’ambiente di esecuzione (cioè l’interprete) Passare un array come parametro
lancia un’eccezione di tipo Spesso si scrivono metodi statici che ricevono
ArrayIndexOutOfBoundsException array parametri espliciti
come
Gli array sono una struttura dati ad
accesso casuale
n Cioè il tempo di accesso (in lettura o
scrittura) a uno dei suoi elementi non
deve dipendere dal valore dell’indice
associato a tale elemento Ricevendo una copia della variabile riferimento,
nel metodo invocato è anche possibile
La dimensione di un array modificare gli elementi dell’array: il metodo
chiamante vedrà gli elementi dell’array
¨ Un array è un oggetto un po’ strano…
¤ non ha metodi pubblici, né statici né di
esemplare
¨ L’unico elemento pubblico di un oggetto di
tipo array è la sua dimensione, a cui si accede
attraverso la sua variabile pubblica di
esemplare length (attenzione, non è un
metodo!) Un metodo può anche restituire un (riferimento
a un) array
In realtà, length è una variabile pubblica ma è
non può essere modificata
final, quindi , può
soltanto essere ispezionata RIASSUNTO
Costruzione di un array
¨ Sintassi: una
¨ Scopo: costruire un array per contenere dati ¨ Una variabile che si riferisce a un array è
NomeTipo lunghezza variabile oggetto che contiene un
del tipo ; la indica il riferimento all’oggetto array
numero di dati che saranno contenuti nell’array . Copiando il
non si
contenuto della variabile in un’altra
lunghezza
¤ Se è negativa, viene lanciata copia l’array , ma si ottiene un altro
l’eccezione NegativeArraySizeException stesso oggetto array
riferimento allo
NomeTipo
Nota: può essere uno dei tipi
primitivi di Java o il nome di una classe
¨ Nota: i singoli elementi dell’array vengono
inizializzati con le stesse regole delle variabili di
esemplare che siano prive di inizializzazione Clonare un array
esplicita clonare
¨ Se si vuole un array, cioè ottenere
¤ 0 per variabili numeriche e caratteri, false una copia dell’array con identico contenuto,
per variabili booleane, null per variabili oggetto bisogna
Variabile riferimento a un array creare un nuovo array dello stesso tipo
¤
¨ Sintassi: e con la stessa dimensione
¨ Scopo: definire la variabile copiare ogni elemento del primo array
¤
nomeRiferimento come variabile oggetto che nel corrispondente elemento del secondo
potrà contenere un riferimento a un array di array
NomeTipo
dati, ciascuno dei quali sarà di tipo
¨ Le parentesi quadre [ ] sono necessarie e non
devono contenere l’indicazione della
dimensione dell’array Invece di usare un ciclo, è possibile invocare il
metodo statico arraycopy della classe System
Argomenti sulla riga comandi(String[]
args) ¨ Il metodo System.arraycopy consente, più
in generale, di copiare una porzione di un
Quando si esegue un programma Java, è array in un altro array
possibile fornire dei parametri dopo il nome
della classe che contiene il metodo main ¤ Anche l’array di destinazione (quello in cui si
copiano i dati) deve già esistere e deve essere
¨ Tali parametri vengono letti dall’interprete grande a sufficienza
Java (che li riceve dal sistema operativo) e
trasformati in un array di stringhe che
costituisce il parametro del metodo main
Le specifiche della JVM dicono che
¤ la lunghezza dell’array corrisponde sempre al Copiare un intero array con System.arraycopy
numero di parametri forniti sulla riga comandi
¤ se non vengono forniti parametri sulla riga
comandi, viene passato al metodo main un
array di lunghezza zero (perfettamente valido) Clonare un array
¨ E’ anche possibile usare il metodo
Copiare un array ¤ T[] Arrays.copyOf(T[] original, int
newlength)
¤ “abbandonare” il vecchio array, usando poi
quello nuovo
¤ Se newlength == values.length array dinamico
si parla di , sottintendendo che
n Copio tutto l’array gestione dinamica
in realtà si tratta di una
dell’array : non può esserci ambiguità perché
¤ Se newlength < values.length in Java non esistono array dinamici, cioè di
n Tronco l’array alla dimensione fornita dimensione modificabile
¤ Se newlength > values.length ridimensiona l’array
¨ si dice anche che si , di
nuovo senza ambiguità
n Copio tutto l’array e nelle celle in più vengono
messi valori di default secondo le solite regole
È anche possibile usare il metodo clone resize
Il metodo statico
¨ Attenzione: il metodo clone restituisce un
riferimento di tipo Object
¨ È necessario effettuare un cast per ottenere
un riferimento del tipo desiderato
¨ In questo caso double[]
Dimensione fisica vs dimensione logica
¨ Dimesione fisica Lo stesso metodo può essere usato per
¤ values.length è il numero di valori clonare un intero array; in seguito, è
memorizzabili ed è la dimensione fisica consentito utilizzare sia il nuovo sia il vecchio
dell’array Garbage collector
¨ Dimesione logica ¨ Che cosa succede all’array ‘abbandonato’?
¤ valuesSize è il numero di valori ¤ JVM (Java Virtual Machine) provvede a
memorizzati ed è la dimensione logica effettuare automaticamente la gestione della
dell’array memoria (garbage collection) durante
l’esecuzione di un programma
¨ Viene considerata memoria libera (quindi
riutilizzabile) la memoria eventualmente
occupata da oggetti che non abbiano più un
riferimento nel programma
Array riempiti solo in parte
¨ Si dice che un array utilizzato in questo modo
è “riempito solo in parte”, anche se sarebbe Allocazione della memoria in Java
meglio dire “riempito in una sua porzione ¨ A ciascun programma java al momento
iniziale” dell’esecuzione viene assegnata un’area di
memoria
Cambiare dimensione a un array ¨ Una parte della memoria serve per
memorizzare il codice; quest’area è statica,
¨ Abbiamo già visto come in Java sia ovvero non modifica le sue dimensioni durante
impossibile aumentare (o diminuire) la l’esecuzione del programma
dimensione di un array ¨ In un’area dinamica (ovvero che modifica la
¨ Ciò che si può fare è: sua dimensione durante l’esecuzione) detta
¤ creare un nuovo array più grande di quello Java Stack vengono memorizzati i parametri e
“pieno” le variabili locali dei metodi
¤ copiarne il contenuto Durante l’esecuzione dei metodi di un
programma vengono creati dinamicamente