Inicialización de matrices en Java

1. Información general

En este tutorial rápido, veremos las diferentes formas en que podemos inicializar una matriz y las sutiles diferencias entre ellas.

2. Un elemento a la vez

Comencemos con un método simple basado en bucles:

for (int i = 0; i < array.length; i++) { array[i] = i + 2; }

Y veamos también cómo podemos inicializar una matriz multidimensional un elemento a la vez:

for (int i = 0; i < 2; i++) { for (int j = 0; j < 5; j++) { array[i][j] = j + 1; } }

3. En el momento de la declaración

Ahora inicialicemos una matriz en el momento de la declaración:

String array[] = new String[] { "Toyota", "Mercedes", "BMW", "Volkswagen", "Skoda" };

Al crear una instancia de la matriz, no tenemos que especificar su tipo:

int array[] = { 1, 2, 3, 4, 5 };

Tenga en cuenta que no es posible inicializar una matriz después de la declaración utilizando este enfoque. Si lo intenta, se producirá un error de compilación.

4. Usando Arrays.fill ()

La clase java.util.Arrays tiene varios métodos llamados fill () que aceptan diferentes tipos de argumentos y llenan toda la matriz con el mismo valor:

long array[] = new long[5]; Arrays.fill(array, 30);

El método también tiene varias alternativas que establecen un rango de una matriz en un valor particular:

int array[] = new int[5]; Arrays.fill(array, 0, 3, -50);

Tenga en cuenta que el método acepta la matriz, el índice del primer elemento, el número de elementos y el valor.

5. Usando Arrays.copyOf ()

El método Arrays.copyOf () crea una nueva matriz copiando otra matriz. El método tiene muchas sobrecargas que aceptan diferentes tipos de argumentos.

Veamos un ejemplo rápido:

int array[] = { 1, 2, 3, 4, 5 }; int[] copy = Arrays.copyOf(array, 5);

Algunas notas aquí:

  • El método acepta la matriz de origen y la longitud de la copia que se creará.
  • Si la longitud es mayor que la longitud de la matriz que se va a copiar, los elementos adicionales se inicializarán usando sus valores predeterminados
  • Si la matriz de origen no se ha inicializado, se lanza una NullPointerException
  • Si la longitud de la matriz de origen es negativa, se lanza una NegativeArraySizeException

6. Usando Arrays.setAll ()

El método Arrays.setAll () establece todos los elementos de una matriz usando una función generadora:

int[] array = new int[20]; Arrays.setAll(array, p -> p > 9 ? 0 : p); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Si la función del generador es nula, se lanza una NullPointerException .

7. Usando ArrayUtils.clone ()

Finalmente, utilicemos la API ArrayUtils.clone () de Apache Commons Lang 3, que inicializa una matriz creando una copia directa de otra matriz:

char[] array = new char[] {'a', 'b', 'c'}; char[] copy = ArrayUtils.clone(array);

Tenga en cuenta que este método está sobrecargado para todos los tipos primitivos.

8. Conclusión

En este artículo, hemos explorado diferentes formas de inicializar matrices en Java.

Como siempre, la versión completa del código está disponible en GitHub.