2012-05-25 24 views
14

Eventuali duplicati:
When to use ArrayList over array[] in c#?Differenze significative nella lista matrice vs matrice?

Dal punto di vista dei costi di memoria o processore, fa sembrano esserci una differenza significativa tra una matrice e un oggetto arrayList?

+0

@NikhilAgrawal non è un duplicato di tale argomento poiché la domanda riguarda specificamente le differenze di prestazioni, non il contesto di utilizzo. – Asik

+0

Sospetto che ArrayList sia più lento in quanto è necessario eseguire il cast di ogni elemento dell'array durante il recupero. – Matthew

risposta

41

Matrice (uno spazio dei nomi Sistema) è un tipo di dati che può essere utilizzato chiamando gli indici. durante il runtime, non si può veramente cambiare la dimensione dell'array, a meno che non si usi il metodo di copiare l'array e di eliminare quello vecchio.

In .NET, Visual Studio utilizza una classe speciale per archiviare i dati. Per questo motivo, le prestazioni sono abbastanza veloci. Questo è anche perché in un array, è necessario specificare la dimensione e, quindi, i dati vengono memorizzati uno dopo l'altro.

Esempi:

int[] myNumbers= new int[5]; 
myNumbers[0] = 16; 

ArrayList (System.Collections namespace) è una raccolta tipo di dati. Per riempire una lista di array, si può usare il metodo .Add. Le liste di array sono molto dinamiche nel senso che quando si aggiungono e/o si rimuovono elementi da essa, la performance rimane la stessa.

La struttura interna di ArrayList è una matrice.

Esempi:

ArrayList myArray = new ArrayList(); 
myArray.Add(“Steph”); 
string str = myArray[0]; 

maggior parte del tempo, ci tendono a scegliere le liste di array, piuttosto che le matrici poiché non abbiamo idea di quanto grande sta per finire. Gli array sono l'ideale quando sai quanti oggetti hai intenzione di inserire. Quando possibile, si consiglia di utilizzare gli array in quanto ciò migliora drasticamente le prestazioni.

L'array è una sequenza di dati omogenei mentre ArrayList è una sequenza di dati eterogenei. Ecco perché dobbiamo digitare tutti i dati in ArrayLists.

Gli array sono multidimensionali ma ArrayList è sempre monodimensionale.

Gli array sono fortemente tipizzati e funzionano bene come parametri. Se conosci la lunghezza della tua collezione ed è fissa, dovresti usare un array.

Le liste di array non sono digitate a mano, ogni inserimento o nuovo processo richiede un cast per tornare al tipo originale. Se hai bisogno di un metodo per fare un elenco di un tipo specifico, ArrayLists non è sufficiente perché potresti passare in un ArrayList contenente qualsiasi tipo. Le liste di array usano internamente un array ad espansione dinamica, quindi c'è anche un colpo per espandere la dimensione dell'array interno quando raggiunge la sua capacità.

+0

C'è un altro oggetto chiamato una semplice lista. Come si confronta con un ArrayList. Quale sembra essere un controllo più sofisticato. –

+2

Un elenco è una combinazione di buone proprietà di matrice e lista di array. Come Array contiene dati omogenei. Come ArrayList, puoi continuare ad aggiungere tutti i dati che vuoi. –

6

Una matrice è una struttura di dati di basso livello che essenzialmente mappa in una regione in memoria. Un ArrayList è un elenco di lunghezza variabile implementato come un array di object che viene riallocato man mano che l'elenco aumenta.

ArrayList pertanto ha un sovraccarico relativo alla gestione della dimensione dell'array interno e un sovraccarico in più relativo alla trasmissione di oggetti al tipo corretto quando si accede all'elenco.

Inoltre, la memorizzazione di tutto come object significa che i tipi di valore vengono inseriti in box su write e unboxed su read, il che è estremamente dannoso per le prestazioni. Utilizzando List<T>, un elenco di dimensioni variabili simili ma fortemente tipizzate evita questo problema.

In effetti, ArrayList è praticamente obsoleto a favore di List<T> da .NET 2.0.

+0

C'è un altro oggetto chiamato una semplice lista. Come si confronta con un ArrayList. Quale sembra essere un controllo più sofisticato. –

+0

@MikeOlson Ho spiegato che nella mia risposta già ... l'hai letto? – Asik

+0

Scusami, sì, l'ho letto ma non ero sicuro se l'elenco fosse lo stesso dell'elenco semplice. Quindi, in pratica, questa semplice lista ha sostanzialmente sostituito la lista di array in favore della facilità d'uso? –

1

Un array è un blocco contiguo di memoria di dimensioni fisse, mentre un ArrayList (sebbene si preferisca List da .NET 2.0) avvolge un array per fornire storage dinamicamente ridimensionabile.

La "differenza" tra loro è che, per quanto incapsulati, un ArrayList è ridimensionabile, un array no. Per quanto riguarda l'implementazione: poiché un ArrayList esegue il wrapping (e rialloca) gli array richiederà una quantità leggermente maggiore di memoria rispetto a un array (poiché deve conoscere il numero corrente di elementi, al contrario della sua capacità), inoltre una ArrayList richiede tempo di CPU per riallocare e copiare il suo array interno se raggiunge mai la sua capacità interna.

Tuttavia, creare un'istanza di ArrayList non è più costoso dell'allocazione di un array. L'unica differenza è la manciata di istruzioni necessarie per inizializzare lo stato dell'ArrayList. La differenza è trascurabile e non vale la pena preoccuparsi.

Troverete che se state riallocando un array da soli come mezzo per creare una collezione ridimensionabile, allora è meglio usare ArrayList/List come è stato accuratamente testato.

+1

C'è un altro oggetto chiamato una semplice lista. Come si confronta con un ArrayList. Quale sembra essere un controllo più sofisticato. –

+0

La principale differenza tra ArrayList e Elenco generico è che l'elenco generico è sicuro mentre l'array non lo è. – DinoMyte

Problemi correlati