Un errore comune fatto da nuovi programmatori è quello di memorizzare tutte le collezioni di dati in array semplici . Mentre la matrice di base è una struttura di dati grande , ha un certo numero di punti deboli che possono essere evitati utilizzando alcune delle altre strutture di dati di base . Le Collezioni Framework Java fornisce una serie di facili da utilizzare interfacce e classi che implementano alcune delle strutture dati più comuni in informatica. Base Array
La cosa migliore di una matrice di base in Java è che può scrivere e leggere in modo rapido . Tuttavia, l'aggiunta permanentemente o rimozione di un elemento dalla matrice richiede una grande quantità di tempo, perché Java non supporta le matrici dinamiche . Ogni volta che si ridimensiona un array in Java , è necessario ricostruire l'array di nuovo da zero, un elemento alla volta , con un ciclo. È possibile evitare questo da sempre inizializzare le matrici per la dimensione massima richiesta in qualsiasi momento durante la fase di esecuzione , ma che può essere un grave spreco di memoria ed è solo cattivo design in generale .
ArrayList
la classe ArrayList dalla libreria java.util affronta alcuni di questi problemi avvolgendo un insieme di funzioni di gestore intorno a un array di nascosto . Questa matrice è strategicamente aumentata e diminuita in misura periodicamente in modo che, in media , aggiungere o rimuovere elementi avviene molto rapidamente . Ma di tanto in tanto , il nascosto , array interno deve essere semplicemente ridimensionate , e in quei casi , l'operazione richiede una maggiore quantità di tempo .
LinkedList
< p > il LinkedList va oltre l' ArrayList e in realtà non ha alcuna matrice di sorta , nascosto o meno. Invece , i record sono margherita insieme incatenato in nodi , con ogni nodo contiene un riferimento all'indirizzo di memoria della prossima . Il vantaggio di una LinkedList è che l'aggiunta o la rimozione di nuovi pezzi di dati avviene sempre molto velocemente il tempo e non c'è mai l'eventuale ridimensionamento di una matrice da eseguire . Tuttavia, non è possibile accedere ai dati nel mezzo della lista senza passare attraverso l'intera lista dalla parte anteriore o posteriore , in modo che il tempo necessario per leggere i dati dal centro di una LinkedList può essere significativo .
l' ArrayList permette di dati ovunque all'interno di esso a cui accedere molto rapidamente, e di solito può ridimensionare in modo rapido, ma a volte richiede più tempo quando la sua matrice interna deve essere ricostruito . LinkedList può sempre aggiungere e rimuovere i dati dalla lista molto in fretta , ma il recupero dei dati dal mezzo della lista può richiedere molto tempo . Questo rende la LinkedList una buona scelta per pile e code che saranno accessibili solo nella parte anteriore o posteriore , ma l' ArrayList una scelta migliore come un sostituto generale per il semplice array .
HashSet < br >
HashSet , come sia l' ArrayList e LinkedList , consente ai dati di essere aggiunti e rimossi molto , molto velocemente , e ha anche un altro vantaggio : una HashSet possono essere ricercati in modo estremamente rapido , più veloce di un array , ArrayLists o LinkedLists . Lo fa eseguendo un'operazione matematica su un pezzo di dati per determinare l'indice di un array , e quindi eseguendo la stessa operazione sui dati da cercare di ottenere l'indice dei dati desiderati .
che è fonte di confusione , non ti preoccupare . La cosa importante è che HashSets sono grandi per insiemi di dati che dovranno essere ricercati attraverso più e più volte . Ma hanno anche una debolezza significativa : un HashSet non mantiene l'ordine dei dati che viene inserito in esso, e l'ordinamento degli elementi del set può cambiare da un momento all'altro . Ad esempio , in un array di base , se un elemento è posizionato in corrispondenza dell'indice 0 , il programmatore può contare su di essa rimanendo a indice 0 per sempre fino a che non lo cambia . Ma in un HashSet , un elemento con indice 0 in un dato momento potrebbe essere indice di 327 nel momento successivo .