Array List
Array List
Esta es la interfaz List<E>. Aquí tienes una breve explicación de cada método definido en
esta interfaz:
Este conjunto de métodos proporciona la funcionalidad básica para cualquier lista: añadir,
eliminar, obtener elementos, verificar el tamaño y el estado de la lista (vacía o no) y limpiar
todos los elementos. Estas son las firmas de los métodos que cualquier implementación de
una lista, como tu ArrayList, debe proporcionar.
El código anterior define una clase llamada ArrayList, que es una implementación
personalizada de una lista en Java, inspirada en cómo funcionan las listas dinámicas en
muchas bibliotecas estándar. Esta clase es genérica, lo que significa que puede almacenar
elementos de cualquier tipo, especificados por E.
La clase declara tres variables privadas: items, size y capacity. items es un arreglo de
objetos (Object[]) que almacenará los elementos de la lista. La variable size mantiene el
número de elementos actualmente en la lista, mientras que capacity representa la cantidad
máxima de elementos que el arreglo puede almacenar antes de necesitar ser redimensionado.
Este código proporciona la base para una lista dinámica que puede crecer a medida que se
añaden elementos. Inicializa la lista con una capacidad fija, pero esta puede ser ajustada
(aunque no se muestra en el fragmento de código proporcionado). Esto permite gestionar los
elementos de manera eficiente en términos de memoria y rendimiento.
1. Método Expand()
o Descripción: Este método aumenta la capacidad del arreglo items cuando se
llena.
o Explicación:
▪ Object[] aux = new Object[capacity + 10];: Crea un nuevo
arreglo aux con una capacidad aumentada en 10.
▪ System.arraycopy(items, 0, aux, 0, size);: Copia todos los
elementos del arreglo actual items al nuevo arreglo aux.
▪ capacity += 10;: Incrementa la variable capacity en 10,
actualizando la capacidad del arreglo.
▪ items = aux;: Asigna el nuevo arreglo aux a items, reemplazando
el viejo arreglo con el nuevo de mayor capacidad.
2. Método isFull()
o Descripción: Este método verifica si el arreglo items está lleno.
o Explicación:
▪ return capacity == size;: Devuelve true si la capacidad actual
del arreglo es igual al número de elementos en la lista (size),
indicando que el arreglo está lleno; de lo contrario, devuelve false.
Esta parte del código añade un elemento a la lista ArrayList y se asegura de que haya
suficiente espacio en el arreglo para el nuevo elemento. Vamos a desglosarlo:
1. @Override
o Descripción: Esta anotación indica que el método add está sobrescribiendo
un método de la interfaz List<E> que la clase ArrayList implementa.
2. public void add(E e) {
o Descripción: Define un método público add que acepta un parámetro de tipo
E (el tipo de elemento que la lista almacenará).
3. if (isFull()) { Expand(); }
o Descripción: Verifica si la lista está llena utilizando el método isFull().
o Detalles: Si isFull() devuelve true, llama al método Expand() para
aumentar la capacidad del arreglo items.
4. items[size++] = e;
o Descripción: Añade el nuevo elemento e al arreglo items en la posición
indicada por size.
o Detalles: Después de añadir el elemento, incrementa size en 1 (size++).
Esto asegura que la próxima vez que se añada un elemento, se almacene en la
siguiente posición libre del arreglo.
Este método add sobrecargado añade un elemento e en una posición específica index en la
lista ArrayList. Vamos a desglosarlo paso a paso:
1. @Override
o Descripción: La anotación indica que este método sobrescribe un método
definido en la interfaz List<E>.
2. public void add(E e, int index) {
o Descripción: Declara un método add que acepta un elemento e de tipo E y un
índice index donde se añadirá el elemento.
3. if (index < size) {
o Descripción: Verifica si el índice especificado está dentro del rango actual de
la lista (es menor que el tamaño actual).
4. if (isFull()) { Expand(); }
o Descripción: Si la lista está llena (isFull() devuelve true), llama al método
Expand() para aumentar la capacidad del arreglo.
5. for (int i = size; i > index; i--) {
o Descripción: Comienza un bucle for que se ejecuta desde el final de la lista
(size) hasta el índice especificado (index).
6. items[i + 1] = items[i];
o Descripción: Desplaza los elementos en el arreglo items una posición hacia
adelante, comenzando desde el final hasta el índice especificado.
7. items[i] = items[i-1];
o Descripción: Desplaza el elemento en la posición actual a la siguiente
posición.
8. items[index] = e;
o Descripción: Coloca el nuevo elemento e en la posición especificada por
index.
9. size++;
o Descripción: Incrementa el tamaño de la lista (size) en 1, para reflejar la
adición del nuevo elemento.
Después de desplazar todos los elementos, decrementa el tamaño de la lista (size--) para
reflejar que ahora contiene un elemento menos. Finalmente, el método devuelve el elemento
eliminado almacenado en aux. Si el índice proporcionado no es válido, el método devuelve
null, indicando que no se pudo eliminar ningún elemento.
En esencia, este método gestiona la eliminación de un elemento específico de la lista, asegura
que la estructura de la lista se mantenga correctamente y devuelve el elemento eliminado
para referencia.
Estos métodos son bastante sencillos pero esenciales para cualquier implementación de una
lista dinámica. Vamos a desglosarlos:
El método get permite acceder a elementos específicos de la lista por su índice, mientras que
el método size proporciona el número de elementos actuales en la lista. Estos métodos son
fundamentales para manejar y acceder a los datos en una implementación de lista dinámica.
1. Método clear()
o Descripción: Este método vacía la lista y la reinicia a su capacidad inicial.
o Detalles:
▪ @Override: Indica que está sobrescribiendo el método clear definido
en la interfaz List<E>.
▪ public void clear() {: Define el método clear que no acepta
parámetros y no devuelve ningún valor.
▪ capacity = 10;: Restablece la capacidad del arreglo items a 10.
▪ items = new Object[capacity];: Crea un nuevo arreglo items con
la capacidad restablecida a 10, eliminando todos los elementos
anteriores.
2. Método isEmpty()
o Descripción: Este método verifica si la lista está vacía.
o Detalles:
▪ @Override: Indica que está sobrescribiendo el método isEmpty
definido en la interfaz List<E>.
▪ public boolean isEmpty() {: Define el método isEmpty que no
acepta parámetros y devuelve un valor booleano.
▪ return size == 0;: Devuelve true si el tamaño de la lista es 0, lo
que significa que la lista está vacía; de lo contrario, devuelve false.