Arrays

Un array es un tipo de estructura de datos que tiene un cierto parecido con las tuplas de Python. Sin embargo tiene algunas importantes diferencias que la hacen mucho más operativas. Sus características son:

  • Una vez declaradas, no pueden variar su tamaño.
  • Para acceder a cada uno de sus elementos, se utilizan los índices, que irán encerrados entre corchetes. El primer índice es siempre el 0.
  • Todos los elementos del array deben de ser del mismo tipo de datos.
  • El contenido de cada uno de sus elementos, puede ser modificado.
  • Puede haber arrays de dos o más dimensiones. Incluso cada una de sus dimensiones, puede tener diferente cantidad de elementos.
public class Prueba {
    public static void main(String[] args) {
        int[] medidas={40,30,20}; //declaramos e inicializamos.

        //int[] medidas=new int[3]; otra forma de definirla sin inicializarla.
        System.out.println("Las medidas de equipaje admitido son:");
        System.out.println("Alto: "+medidas[0] +". Largo:"+medidas[1] +". Ancho: "+medidas[2]);
    }
}
Resultado:

Las medidas de equipaje admitido son:
Alto: 40. Largo:30. Ancho: 20

En el ejemplo anterior hemos declarado un array de enteros y hemos dado valor a sus elementos. También se podía haber declarado solo, en cuyo caso todos sus elementos toman el valor inicial 0.

También hemos visto como acceder a sus elementos. Utilizamos el nombre del array y el índice (entre corchetes) comenzando por el índice 0.

Podemos darles nuevo valor a sus elementos:

public class Prueba {
    public static void main(String[] args) {
        int[] medidas={40,30,20}; //declaramos e inicializamos.

        //int[] medidas=new int[3]; otra forma de definirla sin inicializarla.
        System.out.println("Las medidas de equipaje admitido son:");
        System.out.println("Alto: "+medidas[0] +". Largo:"+medidas[1] +". Ancho: "+medidas[2]);

        medidas[0]=45;
        medidas[2]=24;

        System.out.println("Las medidas han variado, ahora son:");
        System.out.println("Alto: "+medidas[0] +". Largo:"+medidas[1] +". Ancho: "+medidas[2]);
    }
}
Resultado:

Las medidas de equipaje admitido son:
Alto: 40. Largo:30. Ancho: 20
Las medidas han variado, ahora son:
Alto: 45. Largo:30. Ancho: 24

Podemos recorrer todos los elementos de un Array con una estructura for:

public class Prueba {
    public static void main(String[] args) {
        String[] colores={"azul", "verde", "violeta", "naranja"};
        for (String color : colores) {
            System.out.println("Mi color preferido es: "+color);
        }
    }
}
Resultado:

Mi color preferido es: azul
Mi color preferido es: verde
Mi color preferido es: violeta
Mi color preferido es: naranja

Un array puede tener dos o más dimensiones, aunque es poco frecuente ver arrays de más de dos dimensiones. Veamos un array con dos dimensiones:

public class Prueba {
    public static void main(String[] args) {
        int[][] mis_numeros=new int [3][4];
        mis_numeros[0][1]=14;
        mis_numeros[1][3]=283;
        mis_numeros[2][0]=7;
        mis_numeros[2][2]=2344;
        for (int k=0; k< mis_numeros.length; k++){
            System.out.println(mis_numeros[k][0]);
        }
        for (int k=0; k< mis_numeros.length; k++) {
            for (int j = 0; j < mis_numeros[k].length; j++) {
                System.out.println("mis_numeros[" + k + "]" + "[" + j + "]: " + mis_numeros[k][j]);
            }
        }
    }
}
Resultado:

0
0
7
mis_numeros[0][0]: 0
mis_numeros[0][1]: 14
mis_numeros[0][2]: 0
mis_numeros[0][3]: 0
mis_numeros[1][0]: 0
mis_numeros[1][1]: 0
mis_numeros[1][2]: 0
mis_numeros[1][3]: 283
mis_numeros[2][0]: 7
mis_numeros[2][1]: 0
mis_numeros[2][2]: 2344
mis_numeros[2][3]: 0

Un array de dos dimensiones es en realidad un array de una dimensión cuyos elementos son a su vez otro array de una dimensión, lo que sumado hacen las dos dimensiones.

El primer array contiene 3 elementos (del 0 al 2), en este caso contiene tres arrays. Hemos decidido que los arrays (elementos) tienen a su vez 4 elementos cada uno (del 0 al 3).

A continuación le hemos dado valor a algunos de los elementos.

Observamos que nos aparece después un nuevo método: nombre_matriz.length Este método nos devuelve el número de elementos que contiene una matriz. Como en este caso los elementos de la matriz son otras matrices, lo que devuelve es el número de matrices que contiene.

En el primer bucle for, nos muestra todos primeros elementos (el [0] ) de todas las matrices. Como son 3 matrices, nos muestra 3 elementos.

El segundo bucle for toma la primera matriz y recorre todos sus elementos. Después toma la segunda y la recorre, así hasta la última. El último elemento es el anterior al tamaño de cada matriz (de ahí el símbolo «<«), ya que empezamos por el elemento [0]

Para recorrer la matriz, utilizamos la instrucción k++ y j++ que lo que hacen es sumar una unidad a cada una de las variables.

Cuando definimos una matríz de más de una dimensión, podemos definir el resto de matrices por separado cada una. Esto permite que no tengan que tener cada una de ellas la misma cantidad de elementos:

public class Prueba {
    public static void main(String[] args) {
        int[][] mis_numeros=new int [3][];
        mis_numeros[0]= new int [2];
        mis_numeros[1]= new int [4];
        mis_numeros[2]= new int [3];

        mis_numeros[0][1]=14;
        mis_numeros[1][3]=283;
        mis_numeros[2][0]=7;
        mis_numeros[2][2]=2344;

        for (int k=0; k< mis_numeros.length; k++) {
            for (int j = 0; j < mis_numeros[k].length; j++) {
                System.out.println("mis_numeros[" + k + "]" + "[" + j + "]: " + mis_numeros[k][j]);
            }
        }
    }
}
Resultado:

mis_numeros[0][0]: 0
mis_numeros[0][1]: 14
mis_numeros[1][0]: 0
mis_numeros[1][1]: 0
mis_numeros[1][2]: 0
mis_numeros[1][3]: 283
mis_numeros[2][0]: 7
mis_numeros[2][1]: 0
mis_numeros[2][2]: 2344

Hemos definido de nuevo una matriz que a su vez contiene tres matrices. Pero luego hemos definido las otras tres matrices por separado, una con 2 elementos, otra con 4 y la última con 3.

Existen varios métodos que aplicados a los Arrays nos pueden ayudar en nuestro programa. Para poder utilizar dichos métodos debemos importarlos con import java.util.Arrays;

Arrays.sort(array) Nos ordenará los elementos del array de menor a mayor:

import java.util.Arrays;

public class Prueba {
    public static void main(String[] args) {
        String[] colores={"azul", "verde", "violeta", "naranja"};
        Arrays.sort(colores);

        for (String color : colores) {
            System.out.println("Mi color preferido es: "+color);
        }
    }
}
Resultado ordenado:

Mi color preferido es: azul
Mi color preferido es: naranja
Mi color preferido es: verde
Mi color preferido es: violeta

Arrays.binarySearch(array, valor) Busca un valor en un Array previamente ordenado y nos facilita su índice:

import java.util.Arrays;

public class Prueba {
    public static void main(String[] args) {
        String[] colores={"azul", "verde", "violeta","naranja"};

        Arrays.sort(colores);
        int lugar=Arrays.binarySearch(colores, "naranja");
        System.out.println("El color naranja está en la posición: "+lugar);
    }
}
Recordemos que el array debe de estar ordenado. 
La primera posición se corresponde con 0, por lo tanto
el resultado será:

El color naranja está en la posición: 1

Arrays.toString (array) Este método nos facilita una cadena String que va a contener todos los elementos del Array.

import java.util.Arrays;

public class Prueba {
    public static void main(String[] args) {
        String[] colores={"azul", "verde", "violeta","naranja"};

        String colores_texto=Arrays.toString(colores);
        System.out.println(colores_texto);
    }
}
Resultado:
[azul, verde, violeta, naranja]

Arrays.fill (array, valor) Cambia todos los elementos del array al valor indicado como parámetro.

import java.util.Arrays;

public class Prueba {
    public static void main(String[] args) {
        String[] colores={"azul", "verde", "violeta","naranja"};

        Arrays.fill(colores,"blanco");

        String colores_texto=Arrays.toString(colores);
        System.out.println(colores_texto);
    }
}
Resultado:
[blanco, blanco, blanco, blanco]

Arrays.equals (array_1, array_2) Este método es el mismo que se aplica para comparar si dos String son iguales. Para que sean iguales deben de tener los mismos elementos y en el mismo orden.

import java.util.Arrays;

public class Prueba {
    public static void main(String[] args) {
        String[] colores={"azul", "verde", "violeta","naranja"};
        String[] mi_color={"blanco","blanco","blanco","blanco"};

        Arrays.fill(colores,"blanco");
        if (Arrays.equals(colores,mi_color)){
            System.out.println("Los dos Arrays son iguales.");
        }
    }
}
Resultado:
Los dos Arrays son iguales.

Arrays.copyOf(array, tamaño) Nos facilita un nuevo array a partir del primero, con el tamaño indicado como parámetro:

import java.util.Arrays;

public class Prueba {
    public static void main(String[] args) {
        String[] colores={"azul", "verde", "violeta","naranja"};
        String[] nuevo= Arrays.copyOf(colores,6);
        nuevo[4]="rojo";
        nuevo[5]="negro";
        String texto=Arrays.toString(nuevo);
        System.out.println(texto);
    }
}
Resultado:
[azul, verde, violeta, naranja, rojo, negro]

Si el nuevo Array tiene el mismo tamaño que el original, lo que crea es una copia del mismo.

Si el nuevo tamaño es menor, en el nuevo se recortarán los elementos que no quepan.

Si el tamaño pasa a ser mayor, añade nuevos elementos con el valor por defecto para el tipo de elemento del Array.

Arrays.asList (array) Con este método obtendremos un objeto List que va a contener todos los elementos y en el mismo orden que el array original. El nuevo objeto podrá ser tratado como una lista, pero con dos importantes datos a tener en cuenta:

  • Cualquier cambio que hagamos en el nuevo objeto list, afectará también al array original.
  • El nuevo objeto list, no podrá añadir ni suprimir elementos ya que el array tampoco puede variar su número de elementos.
import java.util.Arrays;
import java.util.List;

public class Prueba {
    public static void main(String[] args) {
        String[] colores={"azul", "verde", "violeta","naranja"};
        List<String> colores_lista=Arrays.asList(colores);
        colores_lista.set(2,"amarillo");

        System.out.println(colores_lista);

        String texto=Arrays.toString(colores);
        System.out.println(texto);
    }
}
Resultado:

[azul, verde, amarillo, naranja]
[azul, verde, amarillo, naranja]
InicioComandos JavaBloques de código.
Comentar códigoSystem.out.printScanner (System.in)
Captura de erroresStringDatos Numéricos
Elementos aleatoriosDatos Fecha/horaConstantes
Bucles forBucles whileBloque if
ArraysArrayListswitch case
HashSetHashMapMétodos.
ClasesArchivosEntorno gráfico Swing
JFrame (Ventanas)Componentes básicos.