java-arrays-unidimensionales

Arrays en Java: declaración, inicialización y recorrido

  • 4 min

Un array es una estructura de tamaño fijo que almacena elementos del mismo tipo y los identifica por su índice.

Hasta ahora, si queríamos guardar un número, creábamos una variable int a. Si queríamos guardar dos, hacíamos int b. Pero, ¿qué pasa si queremos guardar las notas de los 30 alumnos de una clase? ¿O las temperaturas de cada hora del año?

No vamos a crear 30 variables (nota1, nota2, nota3…). Eso sería una locura imposible de mantener.

Para solucionar esto existen los Arrays. Todos sus elementos se agrupan bajo una única referencia.

Declaración e instanciación

Para entender su declaración, recuperamos lo aprendido sobre referencias.

En Java, un array es un objeto. Normalmente vive en el heap y la variable que usamos para manejarlo contiene una referencia.

Para crear un array necesitamos dos pasos (que a veces hacemos juntos):

Paso a: declaración

Avisamos a Java de que esa variable va a apuntar a un array de enteros.

// Sintaxis recomendada (tipo[] nombre)
int[] notas;

// Sintaxis heredada de C (tipo nombre[]) - FUNCIONA PERO EVÍTALA
int notasC[];
Copied!

En este punto, notas vale null. No hay “huevera”, solo hay una etiqueta.

Paso b: instanciación (reserva de memoria)

Aquí es donde usamos new para pedirle espacio al Heap. Debemos decir el tamaño fijo.

notas = new int[5]; // Creamos un array de 5 huecos
Copied!

Todo en uno (lo habitual)

int[] puntuaciones = new int[10];
Copied!

Cuando haces esto, Java reserva espacio para 10 enteros y, muy importante, los inicializa a su valor por defecto:

  • 0 para números (int, double…).
  • false para boolean.
  • null para objetos (String, etc).

Inicialización con valores

Si ya sabes qué valores quieres meter desde el principio, Java nos da un “atajo” sintáctico para no tener que ir posición por posición.

// Java cuenta los elementos y deduce que el tamaño es 5
String[] diasLaborables = {"Lunes", "Martes", "Miércoles", "Jueves", "Viernes"};
Copied!

Este atajo solo funciona en la misma línea de la declaración.

Acceso a los elementos

Los Arrays en Java tienen índice base-0. Esto significa que el primer elemento está en la posición 0, no en la 1.

Si tenemos un array de tamaño 5:

  • El primer elemento es array[0].
  • El último elemento es array[4] (Tamaño - 1).
int[] numeros = {10, 20, 30, 40, 50};

System.out.println(numeros[0]); // Imprime 10
numeros[2] = 99;                // Cambiamos el 30 por un 99
Copied!

Si intentas acceder a numeros[5] en un array de tamaño 5, Java lanzará una excepción y tu programa explotará. A diferencia de C++, Java comprueba los límites por seguridad.

Recorriendo arrays

Tenemos dos formas principales de iterar sobre un array.

Opción a: bucle for clásico

Es útil si necesitas saber la posición (el índice) o si quieres modificar el array. Para saber el tamaño del array usamos la propiedad .length (sin paréntesis, porque es una propiedad final, no un método).

int[] valores = {10, 20, 30};

for (int i = 0; i < valores.length; i++) {
    // Podemos usar 'i' para imprimir la posición
    System.out.println("En la posición " + i + " hay un " + valores[i]);

    // También podríamos modificarlo
    valores[i] = valores[i] * 2;
}
Copied!

Opción b: bucle for-each (recomendado para lectura)

Si solo quieres leer los datos y te da igual la posición, es mucho más limpio.

String[] frutas = {"Manzana", "Pera", "Plátano"};

for (String fruta : frutas) {
    System.out.println("Me gusta la " + fruta);
}
Copied!

Limitaciones de los arrays

Los arrays son muy rápidos, pero tienen una gran pega: Son de tamaño fijo.

Una vez haces new int[5], ese array tendrá 5 huecos para siempre. No puedes añadir un sexto elemento. Si necesitas más espacio, tendrías que:

  1. Crear un array nuevo más grande.
  2. Copiar los datos del viejo al nuevo.
  3. Tirar el viejo.