2008-12-13 17 views
35

¿Cuál es la diferencia entre ArrayList y lista en VB.NET.NET: ArrayList vs Lista

+0

Los enlaces a documentos: [ 'ArrayList'] (http://msdn.microsoft.com/en-us/library/system.collections.arraylist.aspx), ['List'] (http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx) –

Respuesta

47

ArrayLists son esencialmente obsoletos ya que están sin tipo (debe usar moldes con ellos) y son más lentos y menos eficientes en el uso del espacio para los tipos de valor porque requieren que los artículos estén enmarcados.

Las listas genéricas se introdujeron con .Net 2.0 y son el camino a seguir. A menudo, una lista es mejor que una matriz, con algunas desventajas.

Como estas colecciones son parte de .Net Base Class Library, este consejo también se aplica a C# ya cualquier lenguaje .Net que admita genéricos, no es específico de VB.NET.

+0

Además, List es mucho más eficiente en términos de uso de memoria. Consulte http://blogs.msdn.com/b/joshwil/archive/2004/04/13/112598.aspx – PapillonUK

2

Lista puede hacer uso de los genéricos de manera que sólo los objetos de tipos específicos se pueden colocar en él, de modo que usted puede tener supletoria escriba cheques y para que pueda reducir el tiempo de procesamiento debido al boxeo y al desempaquetado. Arraylist no puede usar esto. En casi todos los casos, querrá usar una Lista en lugar de un Arraylist.

+0

Los genéricos se introdujeron con .NEt 2.0 pero estas clases existían antes de eso también. ¿Hay alguna diferencia en la forma en que estas clases se escriben internamente? – MOZILLA

+0

A menos que haya alguna otra clase de lista de la que no tenga conocimiento, entonces esto es incorrecto. El espacio de nombre completo de List es System.Collections.Generic.List, lo que significa que fue específicamente agregado para su uso con Generics. – Kibbee

14

La lista es una implementación genérica de ArrayList. ArrayList almacena todos los objetos como System.Object que luego debe convertir al tipo apropiado. ArrayLists es heterogéneo, List puede almacenar solo un tipo de objetos, ese tipo proporcionado como su parámetro genérico.

List<string> strList; // can store only strings 
List<int> intList; // can store only ints 
ArrayList someList; // can store anything 
+4

Por supuesto, técnicamente siempre podría hacer una lista que almacenara el tipo "Objeto" y almacenar cualquier cosa en él, porque todo hereda intrínsecamente del objeto. – Kibbee

+28

Y todos señalarían y se reirán de ti – Will

3

ArrayList permite escribir esto:

Dim customers as new ArrayList 
Dim c as new Customer 
Dim m as new Manager 
customers.Add(c) 
customers.Add(m) 

'This will cause an exception ' 
For each c as Customer in customers 
console.writeline(c.Name) 
Next 

una lista (de cliente) permite que sólo objeto de tipo cliente y los tipos que heredan de atención al cliente, por lo que no puede hacer este tipo de errores.

Incluso si necesita colocar objetos de tipos no relacionados en la misma colección, una Lista (Of Object) es una mejor opción, ya que hace explícito que se trata de diferentes tipos.

5

ArrayLists son incluso más ineficientes en el espacio cuando se utilizan en 64 bits para almacenar elementos primitivos debido a las referencias de memoria amplia de 64 bits en comparación con las referencias de 32 bits en máquinas de 32 bits y boxeo.

ver este para más detalles: http://blogs.msdn.com/joshwil/archive/2004/04/13/112598.aspx