ArrayList vs List

StackOverflow https://stackoverflow.com/questions/391088

  •  23-08-2019
  •  | 
  •  

Domanda

ho visto questa risposta da Jon su inizializzare l'oggetto generico con tipo sconosciuto :

  

Se si desidera una singola raccolta di   contenere più tipi non correlati di   valori, tuttavia, si dovranno utilizzare   List<object>

Non sto paragonando ArrayList vs List<>, ma ArrayList vs List<object>, come entrambi saranno elementi di tipo object esponendo. Quale sarebbe il vantaggio di utilizzare uno dei due in questo caso?

EDIT: E 'senza alcuna preoccupazione per la sicurezza di tipo qui, dal momento che entrambi classe sta esponendo object come la sua voce. Uno ha bisogno ancora di gettare dal object al tipo desiderato. Sono più interessato a qualcosa di diverso tipo di sicurezza.

EDIT: Grazie Marc Gravell e Sean per la risposta. Siamo spiacenti, posso scegliere solo 1 come risposta, quindi mi fino votare sia.

È stato utile?

Soluzione

Sarete in grado di utilizzare i metodi di estensione LINQ direttamente con List<object>, ma non con ArrayList, a meno che non si inietta un Cast<object>() / OfType<object> (grazie a IEnumerable<object> vs IEnumerable). Che vale la pena un po ', anche se non hai bisogno di sicurezza di tipo ecc.

La velocità sarà circa lo stesso; le strutture saranno ancora in scatola, ecc - quindi non c'è molto altro da dire loro a parte. Solo che io tendo a vedere ArrayList come "oops, qualcuno sta scrivendo il codice legacy di nuovo ..." ;-P

Altri suggerimenti

Un grande vantaggio di utilizzare List<object> è che in questi giorni la maggior parte del codice è scritto per utilizzare le generiche classi / interfacce. Ho il sospetto che in questi giorni la maggior parte delle persone sarebbe scrivere un metodo che prende un IList<object> invece di un IList. Dal momento che ArrayList non implementa IList<object> che non sarebbe in grado di utilizzare una lista di array in questi scenari.

Io tendo a pensare ai non generici classi / interfacce come codice legacy ed evitare per quanto possibile.

In questo caso, ArrayList vs. List<Object> allora non notare eventuali differenze di velocità. Ci potrebbero essere alcune differenze nei metodi attuali disponibili su ciascuno di questi, particolari in .NET 3.5 e conteggio metodi di estensione, ma che ha più a che fare con ArrayList essere un po 'obsoleto di ogni altra cosa.

Sì, oltre ad essere typesafe, collezioni generici potrebbero essere effettivamente più veloce.

Dal MSDN ( http://msdn.microsoft. com / it-it / library / system.collections.generic.aspx )

  

Il System.Collections.Generic   namespace contiene interfacce e   classi che definiscono generico   collezioni, che permettono agli utenti di   creare collezioni fortemente tipizzati che   fornire una migliore sicurezza tipo e   prestazioni rispetto non generico fortemente   collezioni digitato.

Fare un po 'di benchmarking e si sa che cosa funziona in modo ottimale. Ho guestimate che la differenza è molto piccola.

List <> è una versione typesafe di ArrayList. Essa garantirà che si ottiene lo stesso tipo di oggetto nella collezione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top