Apuntes Java: Arrays

Declaración y acceso

Un array es una colección ordenada de elementos del mismo tipo, que son accesibles a través de un índice. Un array puede contener datos primitivos o referencias a objetos.

Los arrays se declaran:

[modificadores]    tipo_variable [ ] nombre;

Por ejemplo:

int [ ] a;
Punto [ ] p;

La declaración dice que a es un array de enteros y p un array de objetos de tipo Punto. Más exactamente, a es una referencia a una colección de enteros, aunque todavía no se sabe cuantos elementos tiene el array. p es una referencia a una colección de referencias que apuntarán  objetos Punto.

Un array se crea como si se tratara de un objeto (de hecho las variables de tipo array son referencias):

a = new int [5];
p = new Punto[3];

En el momento de la creación del array se dimensiona el mismo y se reserva la memoria necesaria.

También puede crearse de forma explícita asignando valores a todos los elementos del array en el momento de la declaración, de la siguiente forma:

int [ ] a = { 5 , 3 , 2 };

El acceso a los elementos del array se realiza indicando entre corchetes el elemento del array que se desea, teniendo en cuenta que siempre el primer elemento del array es el índice 0. Por ejemplo a[1]. En este ejemplo los índices del array de tres elementos son 0, 1 y 2. Si se intenta usar un índice que está fuera del rango válido para ese array se produce un error (en realidad una excepción. Las excepciones se tratan en un capítulo posterior) de 'Indice fuera de rango'. En el ejemplo anterior se produce esta excepción si el índice es menor que 0 o mayor que 2.

Se puede conocer el número de elementos de un array usando la variable length. En el ejemplo a.length contiene el valor 3.

Un array, como cualquier otra referencia puede formar parte de la lista de parámetros o constituir el valor de retorno de un método. En ambos casos se indica que se trata de un array con los corchetes que siguen al tipo. Por ejemplo:

String [ ] metodoConArrays ( Punto [ ] ) { . . }

El método metodoConArrays recibe como parámetro un array de Puntos y devuelve un array de Strings. El método podría invocarse de la siguiente forma:

Punto p [ ] = new Punto [3];
. . .
String [ ] resultado = metodoConArrays(p);

Ejemplo: Podemos reescribir el método que devuelve el número de días de un mes usando un array:

int diasDelMes(int mes) {
    int [] dias = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // añadimos un primer valor 0 porque el primer indice de un array siempre es 0.
    if (mes > 0 && mes <= 12) // para prevenir error de índice fuera de rango. 
        return dias[mes];
    return 0; // Debemos devolver un valor entero necesariamente.
}

Arrays multidimensionales

Es posible declarar arrays de más de una dimensión. Los conceptos son los mismos que para los arrays monodimensionales.

Por ejemplo:

int [ ][ ] a = { { 1 , 2 } , { 3 , 4 } , { 5 , 6 } };
int x = a[1][0];  // contiene 3
int y = a[2][1];  // contiene 6

Se pueden recorrer los elementos de un array multidimensional, de la siguiente forma:

int [ ][ ] a = new int [3][2];
for ( int i = 0 ; i < a.length ; i++ ) 
    for ( int j = 0 ; j < a[i].length ; j++)
        a[i][j] = i * j;

Obsérvese en el ejemplo la forma de acceder al tamaño de cada dimensión del array.

Un array de dos dimensiones es equivalente a una tabla con filas y columnas. El primer índice determina el número de la fila, y el segundo el número de la columna. No existe limitación al número de dimensiones de un array.

Arrays e iteraciones

Es muy habitual manejar los elementos de un array a través de iteraciones. Cuando se quieren tratar todos los elementos de un array se puede escribir una iteración, como en el ejemplo siguiente:

String [] meses = { "" , "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"};
System.out.println("Los meses son:");
for (int i = 1 ; i < meses.length; i++) {
    System.out.println(meses[i]);
}

La salida del programa, será:

Los meses son:
Enero
Febrero
Marzo
Abril
Mayo
Junio
Julio
Agosto
Septiembre
Octubre
Noviembre
Diciembre

Otra forma de escribir la iteración for, para que trate todos los elementos de un array es la siguiente:

String [] meses = { "" , "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"};
System.out.println("Los meses son:");
for (String mes : meses ) {
    System.out.println(mes);
}
  • La salida producida es exactamente la misma que antes.
  • La cláusula for puede leerse como: para cada elemento en el array meses...
  • Cada elemento del array se asigna a la variable mesy esta puede utilizarse en cada pasada de la iteración.
  • Este formato de for puede usarse en arrays o en colecciones (listas, colas, etc, incluidas en el API Collections).

Última actualización: 5/11/2016