7.-ArrayList

5
1 7. LA CLASE ARRAYLIST Esta clase permite la creación y manipulación de arrays cuyo tamaño puede ser modificado dinámicamente. Para crear un ArrayList se pueden utilizar los siguientes métodos a) Crear una lista sin elementos. Dim Empleados As New ArrayList() b) Crear una lista con un tamaño inicial. Dim Empleados As New ArrayList(3) c) Crear una lista e inicializar sus elementos, para ello debemos utilizar la palabra New seguida del tipo de dato del que vamos a crear la colección y los paréntesis, y por último cerrar entre llaves los valores de la colecciones. Dim Caracteres As New ArrayList(New String() {"a", "b", "c"}) Al crear un ArrayList no es necesario especificar su dimensión y ésta puede ser modificada en cualquier momento. Un ArrayList tiene por defecto el tamaño necesario para almacenar 16 ítems. MÉTODOS Add(oObject): Inserta el objeto oObject al final del ArrayList. Los valores que espera recibir un ArrayList son del tipo genérico Object, por lo que podemos insertar en el mismo array valores de diferentes tipos de dato. Devuelve el valor del índice donde se insertó el objeto AddRange(colección): Agrega una colección (array o ArrayList) de objetos al final de la colección. InserRange(index,colección): Agrega una colección (array o ArrayList) de objetos a partir de la posición index del ArrayList. Contains(oObject): Devuelve true si existe el elemento oObject y false en caso contrario. Insert(index,oObject): Inserta un elemento en la posición del ArrayList indicado por index. Remove(oObject): Elimina la primera instancia que coincida con el parámetro oObject, en el caso de haber más de una, la operación sólo se produce sobre la primera que se localiza. RemoveRange(startIndex, count): Elimina un número de elementos igual a count a partir del índice startIndex. GetRange(index,count): Devuelve un ArrayList con los un número de elementos que se corresponde con el parámetro count a partir del índice indicado por index. Repeat(ítem,count): Introduce en el ArrayList el elemento ítem un número de veces que se corresponde con count.

Transcript of 7.-ArrayList

Page 1: 7.-ArrayList

1

7. LA CLASE ARRAYLIST Esta clase permite la creación y manipulación de arrays cuyo tamaño puede ser modificado dinámicamente. Para crear un ArrayList se pueden utilizar los siguientes métodos a) Crear una lista sin elementos. Dim Empleados As New ArrayList() b) Crear una lista con un tamaño inicial. Dim Empleados As New ArrayList(3) c) Crear una lista e inicializar sus elementos, para ello debemos utilizar la palabra New seguida del tipo de dato del que vamos a crear la colección y los paréntesis, y por último cerrar entre llaves los valores de la colecciones. Dim Caracteres As New ArrayList(New String() {"a", "b", "c"}) Al crear un ArrayList no es necesario especificar su dimensión y ésta puede ser modificada en cualquier momento. Un ArrayList tiene por defecto el tamaño necesario para almacenar 16 ítems.

MÉTODOS

• Add(oObject): Inserta el objeto oObject al final del ArrayList. Los valores que espera recibir un ArrayList son del tipo genérico Object, por lo que podemos insertar en el mismo array valores de diferentes tipos de dato. Devuelve el valor del índice donde se insertó el objeto

• AddRange(colección): Agrega una colección (array o ArrayList) de objetos al final de la colección.

• InserRange(index,colección): Agrega una colección (array o ArrayList) de objetos a partir de la posición index del ArrayList.

• Contains(oObject): Devuelve true si existe el elemento oObject y false en caso contrario.

• Insert(index,oObject): Inserta un elemento en la posición del ArrayList indicado por index.

• Remove(oObject): Elimina la primera instancia que coincida con el parámetro oObject, en el caso de haber más de una, la operación sólo se produce sobre la primera que se localiza.

• RemoveRange(startIndex, count): Elimina un número de elementos igual a count a partir del índice startIndex.

• GetRange(index,count): Devuelve un ArrayList con los un número de elementos que se corresponde con el parámetro count a partir del índice indicado por index.

• Repeat(ítem,count): Introduce en el ArrayList el elemento ítem un número de veces que se corresponde con count.

Page 2: 7.-ArrayList

2

• Reverse(): Invierte el orden de los elementos del ArrayList. • IndexOf(object): Devuelve la posición donde está el objeto, comenzando la

búsqueda por el índice 0. • LastIndexOf(object): Devuelve la posición donde está el objeto, comenzando la

búsqueda por la última posición.

RECORRER Y OBTENER VALORES DE UN ARRAYLIST

Se puede acceder a un elemento del ArrayList utilizando sus índices, que comienzan en 0. Ejemplo: Para mostrar por pantalla el elemento tercero de un ArrayList llamado aCoches, que contiene string de marcas de coches, se utilizaría el siguiente método: Console.WriteLine(“El tercer elemento es “,aCoches(4)) Para recorrer un ArrayList podemos emplear la técnica habitual del bucle For...Next y la propiedad Count del objeto ArrayList, que devuelve el número de elementos que tiene el objeto. Ejemplo: Código que recorre los elementos de un ArrayList ' crear un ArrayList Dim alLetras As New ArrayList(6) alLetras.Add("a") alLetras.AddRange(New String() {"b", "c", "d"}) ' recorrer con un bucle For y usando la propiedad Count, ' tener en cuenta que al ser cero el primer índice del ' array, tenemos que restar uno a la propiedad Count Console.WriteLine("Recorrer objeto ArrayList con bucle For") Dim iContador As Integer For iContador = 0 To (alLetras.Count - 1) Console.WriteLine("Elemento actual {0}, valor: {1}", _ iContador, alLetras(iContador)) Next Console.WriteLine()

CAPACIDAD Y VALORES EN UN ARRAYLIST

Cuando manipulamos un objeto ArrayList debemos distinguir entre su capacidad y los valores asignados. La capacidad de un ArrayList hace referencia al número de elementos del array subyacente que contiene este objeto, mientras que los valores asignados se refieren a aquellos elementos del array a los que se ha asignado valor mediante métodos como Add( ) o AddRange( ). Podemos obtener esta información a través de las propiedades Capacity y Count del objeto. Si añadimos las siguientes líneas al anterior ejemplo, visualizaremos estos datos del objeto. Ejemplo: Cantidad y capacidad de un ArrayList llamado alLetras Console.WriteLine("Valores asignados al array: {0}", alLetras.Count)

Page 3: 7.-ArrayList

3

Console.WriteLine("Capacidad del array: {0}", alLetras.Capacity) La capacidad es un aspecto de la clase ArrayList que mejora el rendimiento a la hora de añadir o eliminar elementos del array. Analicemos esta característica con más detenimiento: En primer lugar, todo objeto ArrayList dispone de una propiedad llamada _items, conteniendo el array que internamente gestiona los valores asignados. Esta es una propiedad que no puede manipular el programador, pero que puede visualizar a través del depurador, abriendo la ventana Locales y expandiendo el contenido de un objeto ArrayList, como muestra la siguiente imagen.

Cuando creamos un ArrayList con un tamaño como el del ejemplo anterior, la acción de añadir un valor al objeto no redimensiona el array, puesto que ya está creado con un tamaño determinado, sino que asigna un valor al siguiente elemento libre que no hubiera sido previamente asignado. Veámoslo en el siguiente esquema.

Este comportamiento del objeto tiene la ventaja de que mejora el rendimiento y optimiza recursos, puesto que cada vez que añadimos o eliminamos valores, el array n_items o siempre tiene que ser redimensionado.

¿Qué sucede, sin embargo, cuando se han añadido valores y el array está completo?, pues que el objeto ArrayList detecta esta situación y en la siguiente ocasión en que se añade un nuevo valor, automáticamente se redimensiona duplicando el número de elementos inicial que contenía. Veamos de nuevo un esquema de funcionamiento.

En el caso que muestra la anterior imagen, después de añadir la letra m al objeto, la propiedad Capacity devolvería 12 y la propiedad Count devolvería 9

Page 4: 7.-ArrayList

4

CONVERSIONES DE TIPO

En muchas ocasiones un objeto de un tipo está encapsulado dentro de un objeto genérico Object. Por ejemplo, esto ocurre en el parámetro sender de los procedimientos detectores de eventos, este parámetro es de tipo Object y contiene el objeto del cual depende el evento, para acceder a la instancia del objeto encapsulada dentro de sender debemos efectuar una conversión de tipos o modelado utilizando el método DirectCast() o Ctype().

• DirectCast (miObjeto, tipo_a_convertir): este método convierte miObjeto en tipo_a_convertir. DirectCast requiere una relación de herencia o de implementación entre los tipos de datos de los dos argumentos. Esto significa que un tipo debe heredar de otro o implementar otro. Por ejemplo se puede convertir un elemento de un ArryList que son todos del tipo Object en el tipo específico que contiene.

• Ctype (expresion, tipo_a_convertir): Devuelve el resultado de convertir explícitamente una expresión a un tipo de datos. No es necesario que expresión sea del tipo a convertir ni herede de él, tan sólo que su valor esté dentro del rango permitido por el tipo_a_convertir se produce una excepción. Por ejemplo se puede convertir un valor de tipo Integer a uno de tipo Double pues el tipo Double incluye los valores de Integer.

La instrucción DirectCast es más rápida, en general, que Ctype, pero al utilizar DirectCast debemos estar seguros de que el tipo a convertir hereda del tipo actual sino dará una excepción. Todos los elementos de un ArrayList son de tipo Object, y esto permite que podamos introducir elementos de cualquier tipo, pues todos los tipos son heredados de Object. Para confirmar si un objeto pertenece a un tipo concreto podemos utilizar el método DirectCast al que se le debe proporcionar una expresión como primer argumento y un tipo para convertir como segundo argumento. Ejemplo Código para extraer un elemento del ArrayList Personal que contiene elementos de la estructura Empleado ‘Extraer el elemento 0 del ArrayList para mostrarlo en un TextBox (txtN) txtN.Text= DirectCast (Personal(0),Empleado).Nombre

CONOCER EL TIPO DE UN OBJETO

Si queremos saber si un objeto pertenece a un tipo de datos se puede utilizar la expresión Ejemplo Private Sub BtnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSalir.Click …. End Sub

Page 5: 7.-ArrayList

5

If TypeOf sender Is Windows.Forms.Button Then MsgBox("es un boto") End If

CARGAR EL ARRAYLIST EN UN ComboBox

Para cargar un objeto ArrayList en un ComboBox se debe asignar el objeto a la propiedad DataSource del control. Para indicar que campo del objeto almacenado en un ArrayList es el que se debe visualizar debo utilizar la propiedad DisplayMember del ComboBox. El elemento que se asigna a la propiedad DisplayMember debe ser el nombre de una Property accesible de la clase a la que pertenecen los objetos que contiene el ArrayLis. Ejemplo 'Método para cargar un combobox con el ArrayList Public Sub CargarContenedor(ByRef control As System.Windows.Forms.ComboBox) 'Borro la fuente origen de datos control.DataSource = Nothing 'Establezco como fuente oriten de datos el ArrayList miLista control.DataSource = miAlmacen 'Le indico que Property del objeto del ArrayList es el ‘que debe mostrarse en el combobox control.DisplayMember = "Nombre" End Sub

1. Realizar una estructura de formularios MDI para gestionar las entradas de una agenda. La aplicación debe permitir:

• Agregar entradas • Eliminar entradas • Modificar los entradas • Buscar una entradas por nombre. Para esta operación crear un ComboBox.

Cada operación debe corresponderse con una opción de menú y con una ventana diferente.