Java/Array: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m →Tipi array: rimuovo: superfluo |
|||
Riga 158:
=== Array o Collection? ===
Un array ha la stessa identica funzionalità di una [http://download.oracle.com/javase/6/docs/api/java/util/List.html java.util.List] di dimensioni costanti e che
La scelta fra un tipo array e una List (o altra [http://download.oracle.com/javase/6/docs/api/java/util/Collection.html Collection]) è arbitraria e lasciata al programmatore.
Se si sta progettando l'implementazione privata di una classe o il corpo di un metodo, non c'è motivo di porsi il problema, perché, in futuro, si potrà tornare indietro sulla decisione con modifiche che resteranno sempre circoscritte.
In genere, non vale la pena di scegliere un tipo array al posto di una List ''solo'' per ottimizzare il codice che accede agli elementi della List, cioè per evitare le invocazioni ai metodi <code>get</code> e <code>set</code>: le macchine virtuali odierne adottano internamente delle tecniche di ottimizzazione (come l'<nowiki/>''inlining'' dei metodi di ridotte dimensioni) che rendono superfluo un accorgimento come questo. Inoltre, la classe [http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html java.util.ArrayList] ha prestazioni decisamente buone per la maggior parte delle applicazioni in cui sia necessario disporre di una lista ad accesso casuale.▼
▲
Nella scelta si deve tenere conto anche del fatto che lo strato di astrazione aggiuntivo permette ai client di fornire una implementazione personalizzata, e ciò rende la struttura a oggetti più resistente nei confronti delle eventuali modifiche future che potrà essere necessario implementare nel programma. In certi casi, una collezione personalizzata permette di risparmiare memoria, in quanto non tutto il contenuto deve risiedere in memoria. Si pensi ad una lunga sequenza di elementi uguali tra loro: in alternativa, si può conservare una sola copia del valore, e simulare una collezione di grandi dimensioni manipolando gli indici.<ref>Per maggiori informazioni, vedi [http://download.oracle.com/javase/6/docs/api/java/util/Collections.html#nCopies(int, T) java.util.Collections.nCopies()]</ref> Un'altra implementazione può accedere direttamente alle proprietà di un oggetto o ai campi di un database, mascherandolo dietro l'interfaccia della collezione, invece di utilizzare la memoria come passaggio intermedio (e obbligatorio) per la memorizzazione dei dati.
== Note ==
|