Arrays y ArrayList en Java
Aprende la diferencia entre arrays y ArrayList, cómo usarlos correctamente, y evita errores comunes de rendimiento y legibilidad.
Introducción
Los arrays y las listas son estructuras fundamentales para almacenar y trabajar con colecciones de datos. En este capítulo aprenderás a utilizar correctamente Array
y ArrayList
en Java.
Arrays
Los arrays tienen un tamaño fijo y son muy eficientes cuando sabemos cuántos elementos vamos a manejar. Son ideales para optimizar el uso de memoria.
- Se accede a los elementos por índice.
- El índice comienza en 0.
- No se pueden agregar ni eliminar elementos una vez creado.
ArrayList
Los ArrayList
son estructuras dinámicas. Permiten agregar, eliminar y reorganizar elementos de forma sencilla. Son muy usadas en aplicaciones modernas.
- Internamente usan un array redimensionable.
- Permiten almacenar solo objetos, no tipos primitivos.
- Se encuentran en
java.util
.
// Declaración de un array fijo
int[] numeros = new int[5];
numeros[0] = 10;
numeros[1] = 20;
// Recorrido de un array con for tradicional
for (int i = 0; i < numeros.length; i++) {
System.out.println(numeros[i]);
}
// Recorrido con for-each
for (int numero : numeros) {
System.out.println(numero);
}
// ArrayList dinámico
import java.util.ArrayList;
ArrayList<String> lenguajes = new ArrayList<>();
lenguajes.add("Java");
lenguajes.add("Kotlin");
lenguajes.add("Python");
// Acceso y modificación
System.out.println(lenguajes.get(1)); // Kotlin
lenguajes.set(1, "Go");
// Eliminar elementos
lenguajes.remove("Python");
// Malas prácticas
// 1. Usar ArrayList cuando el tamaño es fijo
// 2. Recorrer con for tradicional cuando no necesitas el índice
// Buenas prácticas
// 1. Preferir for-each para legibilidad
// 2. Evitar operaciones costosas dentro del bucle
// 3. Usar métodos útiles como contains, indexOf, clear
if (lenguajes.contains("Java")) {
System.out.println("Está en la lista");
}
Buenas prácticas
- Prefiere
for-each
si no necesitas el índice. - No modifiques la colección mientras la recorres.
- Usa
ArrayList
solo cuando necesites un tamaño dinámico. - Aprovecha métodos como
contains()
,isEmpty()
,clear()
para escribir código más limpio.
Malas prácticas comunes
- Usar un
ArrayList
sin necesidad cuando un array simple es suficiente. - Insertar o eliminar muchos elementos en medio de un
ArrayList
, lo cual es costoso. - Crear arrays sin inicializarlos adecuadamente, generando errores por
NullPointerException
.
Ejemplo Práctico
Imagina que quieres guardar los nombres de lenguajes aprendidos por un estudiante. Puedes usar un ArrayList
para agregarlos dinámicamente conforme aprende más:
ArrayList<String> lenguajes = new ArrayList<>();
lenguajes.add("Java");
lenguajes.add("Python");
if (!lenguajes.contains("Kotlin")) {
lenguajes.add("Kotlin");
}
Nota Importante
Usa arrays cuando el tamaño sea fijo y el rendimiento crítico. Usa ArrayList
para estructuras más flexibles. Siempre escoge la herramienta adecuada para la situación.
Conclusión
Dominar arrays y listas te permite gestionar colecciones de datos de manera eficiente. Saber cuándo usar cada una es clave para escribir código limpio y optimizado. En el próximo capítulo, veremos cómo trabajar con bucles para automatizar tareas repetitivas.