Vous êtes sur la page 1sur 4

CLASE GENRICA LIST

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

Vous aimerez peut-être aussi