Representa una lista de objetos con establecimiento inflexible de tipos a la que se
puede obtener acceso por ndice. Proporciona mtodos para buscar, ordenar y manipular listas. La clase List es el equivalente genrico de la clase ArrayList. mplementa la interfa! genrica List mediante una matri! cuyo tama"o aumenta din#micamente seg$n se requiera. La clase List utili!a un comparador de igualdad y un comparador de orden. Los mtodos como %ontains, ndex&f, Lastndex&f y Remove utili!an un comparador de igualdad para los elementos de lista. 'l comparador de igualdad predeterminado para el tipo ( se determina de la siguiente manera. )i el tipo ( implementa la interfa! genrica 'quatable, el comparador de igualdad ser# el mtodo 'quals de dic*a interfa!+ en caso contrario, el comparador de igualdad ser# &bject.'quals,&bject-. Los mtodos como .inary)earc* y )ort utili!an un comparador de orden para los elementos de lista. 'l comparador predeterminado para el tipo ( se determina de la siguiente manera. )i el tipo ( implementa la interfa! genrica %omparable, el comparador predeterminado ser# el mtodo %ompare(o de dic*a interfa!+ en caso contrario, si el tipo ( implementa la interfa! no genrica %omparable, el comparador predeterminado ser# el mtodo %ompare(o de dic*a interfa!. )i el tipo ( no implementa ninguna de estas interfaces, no existir# un comparador predeterminado, por lo que *abr# de proporcionarse explcitamente un comparador o un delegado de comparaci/n. 0o se garanti!a que el objeto List est ordenado. 1ebe ordenar List antes de reali!ar operaciones ,como BinarySearch- que requieran que dic*o objeto List est ordenado. )e puede obtener acceso a los elementos de esta colecci/n utili!ando un ndice entero. Los ndices de esta colecci/n est#n basados en cero. List acepta referencia de objeto null como valor v#lido para los tipos de referencia y admite elementos duplicados. Consideraciones de rendimiento %uando vaya a decidir si debe utili!ar la clase List o la clase ArrayList, que tienen una funcionalidad similar, recuerde que, en la mayora de los casos, el rendimiento de List es mejor y que tiene seguridad de tipos. )i para el tipo ( de la clase List se utili!a un tipo de referencia, el comportamiento de ambas clases es idntico. )in embargo, si se utili!a un tipo de valor para el tipo (, *abr# que tener en cuenta los problemas relacionados con la implementaci/n y la conversi/n boxing. )i se utili!a un tipo de valor para el tipo (, el compilador genera especficamente una implementaci/n de la clase List para ese tipo de valor. 'sto significa que no ser# necesario utili!ar la conversi/n boxing para un elemento de lista de un objeto List antes de poder utili!ar dic*o elemento, por lo que, despus de crear unos 233 elementos de lista, el a*orro de memoria por no aplicar la conversi/n boxing a los elementos de lista ser# mayor que la memoria utili!ada para generar la implementaci/n de la clase. Aseg$rese de que el tipo de valor que se utili!a para el tipo ( implementa la interfa! genrica IEquatable. )i no, los mtodos como Contains deben llamar al mtodo Obect!Equals"Obect#, que aplica la conversi/n boxing al elemento de lista afectado. )i el tipo de valor implementa la interfa! ICom$arable y el usuario es el propietario del c/digo fuente, implemente tambin la interfa! genrica ICom$arable para evitar que los mtodos BinarySearch y Sort apliquen la conversi/n boxing a los elementos de lista. )i el c/digo fuente no es suyo, pase un objeto %omparer a los mtodos BinarySearch y Sort )upone una ventaja poder utili!ar la implementaci/n especfica de tipo de la clase List en lugar de usar la clase ArrayList o escribir uno mismo una colecci/n de contenedores con establecimiento inflexible de tipos 'l motivo es que la propia implementaci/n debe *acer lo que .0'( 4rame5or6 ya reali!a por el usuario y que %ommon Language Runtime es capa! de compartir los metadatos y el c/digo del Lenguaje intermedio de 7icrosoft, algo que la propia implementaci/n no puede *acer. Eem$lo 'n el ejemplo de c/digo siguiente se muestran varias propiedades y mtodos de la clase genrica List. )e utili!a el constructor predeterminado para crear una lista de cadenas con una capacidad de 3. )e muestra la propiedad %apacity y, a continuaci/n, se utili!a el mtodo Add para agregar varios elementos. )e confecciona la lista de elementos y se vuelve a mostrar nuevamente la propiedad Ca$acity, junto con la propiedad %ount, para mostrar que la capacidad *a aumentado seg$n era necesario. )e utili!a el mtodo Contains para comprobar la presencia de un elemento en la lista, tambin se utili!a el mtodo nsert para insertar un nuevo elemento en mitad de la lista y se vuelve a mostrar el contenido de la lista. )e utili!a la propiedad tem predeterminada ,el indi!ador en %8- para recuperar un elemento, se usa el mtodo Remove para quitar la primera instancia del elemento duplicado agregado anteriormente y se muestra el contenido nuevamente. 'l mtodo Remo%e siempre quita la primera instancia que encuentra. )e utili!a el mtodo (rim'xcess para reducir la capacidad de modo que coincida con el contador y se muestran las propiedades Ca$acity y Count. )i la capacidad no utili!ada *ubiera sido menor al 93 por ciento de la capacidad total, el tama"o de la lista no se *abra cambiado. Por $ltimo, se utili!a el mtodo %lear para quitar todos los elementos de la lista y se muestran las propiedades Ca$acity y Count. using )ystem+ using )ystem.%ollections.:eneric+ public class 'xample ; public static void 7ain,- ; List<string= dinosaurs > ne5 List<string=,-+ %onsole.?riteLine,@An%apacityB ;3C@, dinosaurs.%apacity-+ dinosaurs.Add,@(yrannosaurus@-+ dinosaurs.Add,@Amargasaurus@-+ dinosaurs.Add,@7amenc*isaurus@-+ dinosaurs.Add,@1einonyc*us@-+ dinosaurs.Add,@%ompsognat*us@-+ %onsole.?riteLine,-+ foreac*,string dinosaur in dinosaurs- ; %onsole.?riteLine,dinosaur-+ C %onsole.?riteLine,@An%apacityB ;3C@, dinosaurs.%apacity-+ %onsole.?riteLine,@%ountB ;3C@, dinosaurs.%ount-+ %onsole.?riteLine,@An%ontains,A@1einonyc*usA@-B ;3C@, dinosaurs.%ontains,@1einonyc*us@--+ %onsole.?riteLine,@Annsert,D, A@%ompsognat*usA@-@-+ dinosaurs.nsert,D, @%ompsognat*us@-+ %onsole.?riteLine,-+ foreac*,string dinosaur in dinosaurs- ; %onsole.?riteLine,dinosaur-+ C %onsole.?riteLine,@AndinosaursEFGB ;3C@, dinosaursEFG-+ %onsole.?riteLine,@AnRemove,A@%ompsognat*usA@-@-+ dinosaurs.Remove,@%ompsognat*us@-+ %onsole.?riteLine,-+ foreac*,string dinosaur in dinosaurs- ; %onsole.?riteLine,dinosaur-+ C dinosaurs.(rim'xcess,-+ %onsole.?riteLine,@An(rim'xcess,-@-+ %onsole.?riteLine,@%apacityB ;3C@, dinosaurs.%apacity-+ %onsole.?riteLine,@%ountB ;3C@, dinosaurs.%ount-+ dinosaurs.%lear,-+ %onsole.?riteLine,@An%lear,-@-+ %onsole.?riteLine,@%apacityB ;3C@, dinosaurs.%apacity-+ %onsole.?riteLine,@%ountB ;3C@, dinosaurs.%ount-+ C C HI (*is code example produces t*e follo5ing outputB %apacityB 3 (yrannosaurus Amargasaurus 7amenc*isaurus 1einonyc*us %ompsognat*us %apacityB J %ountB 2 %ontains,@1einonyc*us@-B (rue nsert,D, @%ompsognat*us@- (yrannosaurus Amargasaurus %ompsognat*us 7amenc*isaurus 1einonyc*us %ompsognat*us dinosaursEFGB 7amenc*isaurus Remove,@%ompsognat*us@- (yrannosaurus Amargasaurus 7amenc*isaurus 1einonyc*us %ompsognat*us (rim'xcess,- %apacityB 2 %ountB 2 %lear,- %apacityB 2 %ountB 3 IH