2010-11-25 26 views

Respuesta

71

Bueno, List<T> está básicamente respaldado por una matriz que generalmente es más grande que la cantidad actual de elementos. Los elementos se colocan en una matriz y se crea una nueva matriz cuando el anterior se queda sin espacio. Esto es rápido para el acceso por índice, pero lento para eliminar o insertar elementos dentro de la lista o al comienzo. Agregar/eliminar entradas al final de la lista es razonablemente barato.

LinkedList<T> es una lista doblemente vinculada: cada nodo conoce su entrada anterior y la siguiente. Esto es rápido para insertar después/antes de un nodo en particular (o la cabeza/cola), pero lento en el acceso por índice.

LinkedList<T>se suele tener más memoria que List<T> porque necesita espacio para todos aquellos próximos referencias anteriores/- y los datos probablemente tendrá menos localidad de referencia, ya que cada nodo es un objeto independiente. Por otro lado, un List<T>puede tener una matriz de respaldo que es mucho más grande que sus necesidades actuales.

+0

es cierto LinkedList tiene más valores que List Shrivallabh

+0

@Shrivallabh: ¿Qué quiere decir con "tiene más valores"? Eso dependerá del contexto, la versión del CLR que esté utilizando, etc. A menos que esté planeando almacenar un * gran * número de elementos, es muy poco probable que sea relevante. –

+0

Tengo una aplicación donde necesito leer archivos de texto enormes y la ID en cada línea que tengo que almacenar, por lo que es mejor hacer una lista LinkedList o List Shrivallabh

8

A List<T> es en realidad una matriz, lo que significa que su operación Add es O (1) al final y O (n) en la parte delantera, pero puede indexarla en O (1). A LinkedList<T> es, como se dice, una lista vinculada. Dado que está doblemente vinculado, puede agregar elementos al frente o atrás en O (1) pero su indexación es O (n).

+4

No estoy seguro de dónde obtener Add being O (log n) - Esperaría que se amortizara a tiempo constante. –

+0

Jon: Probablemente tengas razón. Creo que estaba tratando de hacer un promedio entre O (1) al final y O (n) al principio. – Gabe

Cuestiones relacionadas