← CC2008

Arrays

Semestre 02, 2026

Definición

Lista ordenada de elementos del mismo tipo (homogéneas).
Tamaño fijo: los arreglos no pueden crecer o reducirse.
Se accede a cada elemento mediante un índice.

Declaración y creación


int[] scores = new int[10];
float[] prices = new float[500];
boolean[] flags = new boolean[20];
char[] codes = new char[1750];
L1 arreglo de 10 enteros.
L2 arreglo de 500 flotantes.
L3 arreglo de 20 booleanos.
L4 arreglo de 1750 caracteres.

Indexación


scores[0] = 85;
scores[1] = 90;

System.out.println(scores[0]); // 85
L1 asigna 85 a la posición 0.
L2 asigna 90 a la posición 1.
L4 lee e imprime el primer elemento (85).

Índices

Cada elemento se accede mediante su índice, comenzando en 0 hasta length - 1.

scores[0] = primer elemento.
scores[scores.length - 1] = último elemento.
La indexación permite leer y modificar los valores directamente.

Fuera de límites

Internamente, Java no verifica si el índice es válido antes de acceder al elemento. Si el índice está fuera del rango permitido, se lanza una excepción.


System.out.println(scores[10]); // Error!
ArrayIndexOutOfBoundsException

Ocurre cuando se intenta acceder a una posición que no existe en el arreglo. Es importante usar scores.length para evitar este tipo de errores.

Iteración

Para recorrer un arreglo y procesar todos sus elementos, se utilizan ciclos como for o for-each.

for tradicional

for (int i = 0; i < scores.length; i++) {
    System.out.println(scores[i]);
}
Se controla manualmente el índice.
Permite acceso total al arreglo (lectura y escritura).

for-each (enhanced for)

for-each

for (int score : scores) {
    System.out.println(score);
}
Más legible y simple para recorrer todos los elementos.
Solo lectura (no se puede modificar directamente el arreglo).

Ambos ciclos son válidos. El for tradicional da más control, mientras que el for-each es ideal para recorrer de forma sencilla los valores.

Inicialización directa

Java permite declarar e inicializar un arreglo en una sola línea usando llaves {} y una lista de valores.


int[] unidades = {147, 323, 89, 933};
char[] calificaciones = {'A', 'B', 'C', 'D', 'F'};

System.out.println(unidades.length); // 4

Muy útil para arreglos cuyos valores son conocidos desde el principio.

Solo al declarar

Esta sintaxis solo se puede utilizar al momento de declarar el arreglo. No se puede usar en una asignación posterior:


int[] numeros;
numeros = {1, 2, 3}; // Esto causa error

En ese caso, debes usar:


numeros = new int[] {1, 2, 3};

Arreglos como parámetros

Se pasa la referencia (alias)

Los arreglos pueden pasarse como parámetros a métodos. Dado que son objetos en Java, al pasarlos se transfiere su referencia y no una copia: lo que se manda es un alias.


public void imprimir(int[] arreglo) {
  for (int valor : arreglo) {
    System.out.println(valor);
  }
}
L1 recibe un arreglo por referencia (alias).
L2-4 recorre e imprime cada valor.

Ejemplo

Cualquier modificación hecha dentro del método afecta directamente al arreglo original.


public void modificar(int[] datos) {
  datos[0] = 999;
}

int[] valores = {1, 2, 3};
modificar(valores);
System.out.println(valores[0]); // 999
L2 cambia la posición 0 del arreglo recibido.
L5 crea el arreglo original.
L6 pasa la referencia al método.
L7 el cambio se refleja en el original: imprime 999.

Para copiar

Para evitar efectos colaterales, se puede usar Arrays.copyOf() si necesitas una copia.


import java.util.Arrays;

int[] original = {1, 2, 3, 4};
int[] copia = Arrays.copyOf(original, original.length);
L3 arreglo original.
L4 copia independiente con Arrays.copyOf; no comparte memoria con el original.

Arreglos de objetos

Cuando se declara un arreglo de objetos, Java reserva memoria para las referencias, pero no crea los objetos en sí.


String[] palabras = new String[5];

Esto crea un arreglo con 5 espacios que inicialmente contienen null. Acceder a un elemento sin haberlo inicializado lanza una NullPointerException:


palabras[0] = "hola";

System.out.println(palabras[0]);

Inicialización de arreglos de objetos

Para llenar un arreglo de objetos personalizados, debes crear cada instancia de forma individual:


Persona[] personas = new Persona[3];

for (int i = 0; i < personas.length; i++) {
    personas[i] = new Persona();
}
L1 reserva 3 referencias, todas null.
L3-5 crea una instancia Persona en cada posición.

Sin esta inicialización, cualquier intento de acceder a sus métodos o atributos lanzará una excepción.

Parámetros variables (varargs)

Java permite definir un método que acepte un número variable de argumentos del mismo tipo, usando la sintaxis ...


public double promedio(int... numeros) {
  int suma = 0;
  for (int n : numeros) {
    suma += n;
  }
  return (double) suma / numeros.length;
}

promedio(10, 20, 30);
promedio(1, 2, 3, 4, 5, 6);
L1 int... numeros acepta un número variable de argumentos.
L3-5 los argumentos se tratan como un arreglo; se suman.
L6 devuelve el promedio.
L9-10 se puede llamar con distinta cantidad de argumentos.

Reglas de varargs

Internamente, los argumentos se tratan como un arreglo.
Solo puede haber un parámetro varargs por método.
Debe ser el último parámetro de la lista.
Ideal cuando no sabes cuántos argumentos se pasarán al método.

Arreglos multidimensionales

Un arreglo multidimensional en Java es en realidad un arreglo de arreglos. En álgebra lineal le llamamos matriz.


int[][] matriz = new int[3][4];

matriz[0][0] = 10;

System.out.println(matriz[0][0]);
L1 crea una matriz de 3 filas y 4 columnas.
L2 asigna 10 a la fila 0, columna 0.
L3 imprime ese valor.

Buenas prácticas

  • Siempre verificar el tamaño (.length) antes de acceder.
  • Inicializar arreglos de objetos antes de usarlos.
  • Evitar modificar directamente los arreglos en métodos a menos que sea intencional.

Conclusiones

Los arreglos permiten agrupar datos del mismo tipo de manera ordenada.
Son objetos y se comportan como tales.
Permiten trabajar con datos primitivos y objetos.
Fundamental para el manejo de estructuras más complejas más adelante.