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[];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 huecosTodo en uno (lo habitual)
int[] puntuaciones = new int[10];Cuando haces esto, Java reserva espacio para 10 enteros y, muy importante, los inicializa a su valor por defecto:
0para números (int,double…).falseparaboolean.nullpara 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"};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 99Si 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;
}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);
}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:
- Crear un array nuevo más grande.
- Copiar los datos del viejo al nuevo.
- Tirar el viejo.