</>waridocu

Java

Arrays y ArrayList

Arrays de tamaño fijo, la clase ArrayList que crece sola, y cuándo usar cada uno.

javaarraysarraylistcolecciones

El problema: varias notas, no una sola

El método promedio de la página anterior recibe dos notas fijas. ¿Y si un curso tiene 30 alumnos, o un número de notas que no se sabe de antemano? Hace falta una forma de guardar varios valores bajo un solo nombre. Java ofrece dos: el array, de tamaño fijo, y ArrayList, que crece y achica sola.

Arrays: tamaño fijo

Array es una palabra en inglés que se traduce como “arreglo” o “formación” (la misma palabra que se usa para una formación militar en filas) — en Java se usa directamente en inglés, sin traducir, y así se le dice también hablando en español. La idea es esa: varias casillas ordenadas, una al lado de la otra, todas del mismo tipo. Un array se declara con el tipo seguido de [], y su tamaño queda fijado en el momento en que se crea:

Ejemplo: notas de un curso chicojava
public class Main {
    public static void main(String[] args) {
        int[] notas = new int[3];
        notas[0] = 8;
        notas[1] = 6;
        notas[2] = 9;

        System.out.println(notas[1]);
        System.out.println(notas.length);
    }
}
texttext
6
3
  • new int[3] reserva espacio para exactamente 3 enteros. Ese número no puede cambiar después: no existe un array que “agregue un lugar más” — hay que crear uno nuevo.
  • Se accede a cada posición con [índice], y los índices arrancan en 0: notas[0] es el primer elemento, notas[2] el último de un array de 3.
  • .length (literalmente “largo” o “longitud”, sin paréntesis porque es un atributo, no un método) da el tamaño del array.
Advertencia

Acceder a un índice que no existe (notas[3] en un array de tamaño 3) no da un valor raro ni silencioso: lanza una excepción, ArrayIndexOutOfBoundsException, y el programa termina si nadie la maneja. Es un error muy común al recorrer un array con <= en vez de < en la condición del for.

También se puede crear un array con valores ya cargados, sin pasar por new:

javajava
int[] notas = {8, 6, 9};

Recorrer un array

javajava
int[] notas = {8, 6, 9};

for (int i = 0; i < notas.length; i++) {
    System.out.println(notas[i]);
}

Cuando no hace falta el índice, un for-each es más corto y evita el riesgo de equivocarse con < vs <=:

javajava
for (int nota : notas) {
    System.out.println(nota);
}

for (int nota : notas) se lee “para cada nota en notas” — en cada vuelta, nota toma el valor de la siguiente posición del array, sin necesidad de manejar un índice a mano.

ArrayList: tamaño dinámico

ArrayList es una clase de la biblioteca estándar que se comporta como un array, pero puede crecer y achicarse mientras el programa corre:

Ejemplo: agregar notas sin saber cuántas van a serjava
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> notas = new ArrayList<>();
        notas.add(8);
        notas.add(6);
        notas.add(9);

        System.out.println(notas.get(1));
        System.out.println(notas.size());
    }
}
texttext
6
3

Algunas diferencias frente al array:

ArrayArrayList
TamañoFijo desde que se creaCrece y achica con .add() / .remove()
Acceder a un elementonotas[1]notas.get(1)
Tamaño actualnotas.lengthnotas.size()
ImportNo hace faltaimport java.util.ArrayList;
Tipo de los elementosCualquiera, incluidos primitivos (int[])Solo clases — de ahí Integer, no int
Nota

ArrayList<Integer> usa Integer, la clase envoltorio de int que se mencionó en la página de variables, y no int directamente. ArrayList (y el resto de las colecciones de Java) solo puede guardar objetos, nunca primitivos — por eso hace falta la envoltorio aquí. Al escribir notas.add(8), Java convierte automáticamente ese 8 (un int) a un Integer (autoboxing), así que en la práctica no hace falta pensar en esto todo el tiempo.

ArrayList también se recorre con for-each, igual que un array:

javajava
for (int nota : notas) {
    System.out.println(nota);
}

¿Cuál usar?

Como regla práctica: si sabes el tamaño exacto de antemano y no va a cambiar, un array alcanza y es más liviano. Si el tamaño depende de datos que llegan en tiempo de ejecución — el usuario agrega elementos, se cargan desde un archivo, etc. — ArrayList evita tener que calcular ese tamaño por adelantado.

Pon a prueba

💡 Predice la salida

¿Qué imprime este programa?

javajava
int[] numeros = {10, 20, 30, 40};
int suma = 0;

for (int n : numeros) {
    suma = suma + n;
}

System.out.println(suma);
System.out.println(numeros[numeros.length - 1]);

Imprime 100 y después 40. El for-each recorre los cuatro elementos y los va acumulando en suma (10+20+30+40 = 100). numeros.length - 1 es 3, el índice del último elemento de un array de 4 posiciones (0, 1, 2, 3) — por eso numeros[numeros.length - 1] es una forma común de acceder al último elemento sin escribir el tamaño a mano.

🧩 Ordena el código

Ordena las líneas para cargar tres nombres en un ArrayList e imprimirlos con un for-each.

  1. nombres.add("Ana");
  2. import java.util.ArrayList;
  3. }
  4. nombres.add("Caro");
  5. public static void main(String[] args) {
  6. }
  7. nombres.add("Beto");
  8. for (String nombre : nombres) {
  9. ArrayList<String> nombres = new ArrayList<>();
  10. }
  11. public class Main {
  12. System.out.println(nombre);

Siguiente paso

Guardar notas en un array o una lista está bien, pero un curso real tiene más datos por alumno que solo una nota: nombre, edad, historial. Para agrupar todo eso bajo un mismo objeto, sigue con Clases y objetos.