Saltar al contenido principal
eLearner.app
Módulo 4 · Lección 2 de 28/14 en el curso~15 min
Lecciones del módulo (2/2)

Colecciones y ArrayList

Los arreglos tradicionales en Java tienen un tamaño fijo definido en el momento de la creación. Para trabajar con listas de datos cuyo tamaño puede variar dinámicamente, Java proporciona el Framework de Colecciones (Java Collections Framework). La clase más utilizada es ArrayList.

La Clase ArrayList y los Generics

ArrayList implementa un arreglo redimensionable en memoria. Para declarar un ArrayList, debemos especificar el tipo de elementos que contendrá encerrándolo entre paréntesis angulares < >. Esta funcionalidad se llama Generics.

Para utilizar ArrayList, debemos importarlo al principio del archivo desde java.util.ArrayList.

Declaración e instanciación:

Code
import java.util.ArrayList;

ArrayList<String> shoppingList = new ArrayList<>();

Métodos Principales

Aquí están las operaciones fundamentales en un ArrayList:

  1. add(elemento): Agrega un elemento al final de la lista.
  2. get(indice): Devuelve el elemento en el índice especificado (0-indexed).
  3. size(): Devuelve el número de elementos actualmente presentes en la lista.
  4. remove(indice): Elimina el elemento en el índice indicado.
Code
shoppingList.add("Pane");
shoppingList.add("Latte");

System.out.println("Elementi: " + shoppingList.size()); // Stampa 2
System.out.println("Primo elemento: " + shoppingList.get(0)); // Stampa "Pane"

Recorrer una Lista (For-Each)

El bucle for-each es la estructura ideal para recorrer todos los elementos de una colección:

Code
for (String item : shoppingList) {
    System.out.println(item);
}

Arreglo vs ArrayList: Memoria y Rendimiento

Aunque ArrayList es mucho más flexible que un arreglo estático, conlleva costos a nivel de rendimiento y memoria:

  • Arreglo Estático: Se asigna en un bloque de memoria contiguo, tiene dimensiones fijas y el acceso a los elementos a través del índice es extremadamente rápido. Almacena directamente tipos primitivos sin sobrecarga.
  • ArrayList: Internamente gestiona un arreglo que se redimensiona (creando un nuevo arreglo más grande y copiando los elementos antiguos) cuando se supera su capacidad inicial (generalmente 10). Además, contiene solo referencias a objetos, introduciendo una sobrecarga de memoria por cada elemento.

Autoboxing y Unboxing

Dado que ArrayList solo puede albergar objetos, Java realiza automáticamente la conversión entre tipos primitivos y sus respectivas clases wrapper:

  • Autoboxing: Conversión automática de tipo primitivo a clase wrapper. Por ejemplo, al hacer numbers.add(42), Java convierte automáticamente 42 (int) en Integer.valueOf(42) (Integer).
  • Unboxing: Conversión automática de clase wrapper a tipo primitivo. Por ejemplo, al ejecutar int num = numbers.get(0), Java realiza internamente la conversión de Integer a int.

Pruébalo tú

Ejercicio#java.m4.l2.e1
Intentos: 0Cargando...

Importa ArrayList, declara un ArrayList de String llamado names. Agrega a la lista Alice y Bob, luego imprime su tamaño usando el método size().

Cargando editor...
Mostrar pista

Incluye `import java.util.ArrayList;` al principio. Crea la lista con `ArrayList<String> names = new ArrayList<>();`, agrega los elementos e imprime su tamaño con `names.size()`.

Solución disponible después de 3 intentos

Ejercicio#java.m4.l2.e2
Intentos: 0Cargando...

Declara un ArrayList de Integer llamado numbers, inserta el número 42 e imprímelo recuperándolo a través del índice 0 con get().

Cargando editor...
Mostrar pista

Usa `ArrayList<Integer> numbers = new ArrayList<>();` (con la clase wrapper Integer) e imprímelo con `System.out.println(numbers.get(0));`.

Solución disponible después de 3 intentos

Ejercicio#java.m4.l2.e3
Intentos: 0Cargando...

Declara un ArrayList de String llamado colors. Agrega los colores Red, Green y Blue a la lista. Por último, usa un bucle for-each para recorrer la lista e imprimir cada color en pantalla.

Cargando editor...
Mostrar pista

Declara la lista con `ArrayList<String> colors = new ArrayList<>();`, agrega los tres colores y usa un bucle `for (String c : colors)` para imprimirlos con `System.out.println(c);`.

Solución disponible después de 3 intentos