2010-03-06 2 views

risposta

11

Generalmente si consiglia di scegliere la struttura dati corretta per il lavoro. Devi capire il tuo compito a portata di mano così come tutte le diverse opzioni che hai e come si confrontano in termini di iterazione, ricerca, aggiunta, rimozione e inserimento dei dati. In generale, è necessario comprendere in che modo la struttura dati accede e manipola la memoria e scegliere la migliore struttura dati in base a come si prevede di utilizzare la propria applicazione.

Ovviamente, non è sempre chiaro. Ma puoi capire gli ideali per le diverse strutture di dati.

Ad esempio, dati di lunghezza fissa puramente statici in cui è possibile solo iterare, senza necessità di ricerca, è ideale per un array. È comune utilizzare tali matrici negli algoritmi di cifratura. Se i dati sono statici ma anziché iterare, è necessario eseguire la ricerca, è possibile che si desideri un tipo di struttura ad albero. Se vuoi un inserimento veloce, l'hashing è probabilmente l'ideale. Se i dati cambiano spesso, vuoi una struttura che sia efficiente nel cambiare le sue dimensioni, come una lista.

Ovviamente ci sono molte varianti e combinazioni di strutture dati progettate per risolvere tutti i tipi di problemi specifici. Il motivo per cui ce ne sono così tanti è l'importanza che giocano nello scrivere programmi efficienti. Ad ogni modo, il mio punto è, conoscere le strutture dati. Comprendi le situazioni ideali per ciascuno e poi sarai in grado di decidere o progettare strutture dati adeguate per qualsiasi attività.

2

Gli elenchi possono facilmente aumentare di dimensioni e puoi aggiungere e rimuovere facilmente elementi nel mezzo dell'elenco. Questo non può essere fatto con gli array. Devi però considerare quello che ti serve per la lista. Se non pensi che la lista cambierà molto, allora usa una matrice.

+1

L'auto-ridimensionamento non è l'unica ragione però. L'elenco partecipa a tutte le bontà delle API delle raccolte, quindi puoi risolvere la maggior parte dei problemi relativi alla tua infrastruttura semplicemente utilizzando l'API. – cherouvim

2

Da Array vs ArrayList

un ArrayList è meglio di Array per usare quando non si ha conoscenza in anticipo numero di elementi. ArrayList sono più lenti degli array. Quindi, se hai bisogno di efficienza prova ad usare gli array se possibile.

0

EDIT:
In alcuni casi, quando si tratta di tipi primitivi, è meglio andare con le matrici perché nel caso di ArrayLists, si tratta di boxe e unboxing dei primitivi che potrebbe essere un po 'più lento rispetto alla manipolazione primitivi con matrici.

+0

ovviamente è possibile specificare il tipo di elemento di una matrice. –

+0

Si prega di non dichiarare myList su un tipo concreto (ArrayList). È meglio se usi la lista delle interfacce. – cherouvim

+0

Non importa se si utilizza List o ArrayList se il campo non è API pubblica. Ad esempio, su Android è meno utile chiamare un metodo sul tipo di calcestruzzo ArrayList piuttosto che sull'interfaccia Elenco. Tendo a dichiarare i miei campi privati ​​come il tipo concreto e restituisco l'interfaccia nelle API pubbliche (getter, ecc.). – NateS

0

Una cosa da tenere a mente è che le classi di raccolte Java favoriscono la facilità d'uso per scopi generali rispetto all'ottimizzazione per scenari specifici. Quindi, come ha detto un precedente rispondente, è davvero necessario considerare come lo si utilizzerà.

Ad esempio, se si creano strutture di dati "grandi", ArrayList può risultare piuttosto inefficiente. Ogni volta che raggiungi il limite dell'array, ne assegna uno nuovo (credo) 2x alla dimensione. Quindi in media un ArrayList sarà utilizzato solo al 75%.

In generale si può considerare le collezioni di Java per essere prime approssimazioni che sono di solito abbastanza buono maggior parte del tempo, e quando si ha misurabili problemi prestazioni si dovrebbe essere pronti ad uso alternato, le implementazioni di raccolta più specializzati.

Nel caso menzionato, è possibile considerare ArrayList come un modo più conveniente per gestire un array.

0

Uso elenchi, liste di array e c principalmente perché non devo preoccuparmi di dove è il prossimo slot libero o se è abbastanza grande, dato che Sun ha già fatto questo per me.