Cómo invertir una matriz en Java

1. Resumen

En este artículo rápido, mostraremos cómo podemos invertir una matriz en Java.

Veremos algunas formas diferentes de hacer esto utilizando soluciones puras basadas en Java 8: algunas de ellas mutan una matriz existente y otras crean una nueva.

A continuación, veremos dos soluciones que usan bibliotecas externas: una que usa Apache Commons Lang y otra que usa Google Guava .

2. Definición del problema

La idea básica es invertir el orden de los elementos de la matriz. Entonces, si se le da la matriz:

fruits = {"apples", "tomatoes", "bananas", "guavas", "pineapples"}

Nos gustaría conseguir:

invertedFruits = {"pineapples", "guavas", "bananas", "tomatoes", "apples"}

Veamos algunas formas en que podemos hacer eso.

3. Uso de un bucle for tradicional

La primera forma en que podríamos pensar en invertir una matriz es usando un bucle for :

void invertUsingFor(Object[] array) { for (int i = 0; i < array.length / 2; i++) { Object temp = array[i]; array[i] = array[array.length - 1 - i]; array[array.length - 1 - i] = temp; } }

Como podemos ver, el código recorre la mitad de la matriz, cambiando los elementos en posiciones simétricas.

Usamos una variable temporal para que no perdamos el valor de la posición actual de la matriz durante la iteración.

4. Utilizando Java 8 Stream API

También podemos invertir una matriz utilizando la API Stream:

Object[] invertUsingStreams(Object[] array) { return IntStream.rangeClosed(1, array.length) .mapToObj(i -> array[array.length - i]) .toArray(); }

Aquí usamos el método IntStream.range para generar un flujo secuencial de números. Luego mapeamos esta secuencia en índices de matriz en orden descendente.

5. Uso de Collections.reverse ()

Veamos cómo invertir una matriz usando el método Collections.reverse () :

public void invertUsingCollectionsReverse(Object[] array) { List list = Arrays.asList(array); Collections.reverse(list); }

En comparación con los ejemplos anteriores, esta es una forma más legible de realizar la tarea.

6. Uso de Apache Commons Lang

Otra opción para invertir una matriz es utilizar la biblioteca Apache Commons Lang . Para usarlo, primero debemos incluir la biblioteca como una dependencia:

 org.apache.commons commons-lang3 3.5 

La última versión de Commons Lang se puede encontrar en Maven Central.

Vamos a usar la ArrayUtils clase para invertir la matriz:

public void invertUsingCommonsLang(Object[] array) { ArrayUtils.reverse(array); }

Como podemos ver, esta solución es bastante sencilla.

7. Uso de Google Guava

Una opción más es utilizar la biblioteca de Google Guava . Al igual que hicimos con Commons Lang , incluiremos la biblioteca como una dependencia:

 com.google.guava guava 22.0 

La última versión se puede encontrar en Maven Central.

Luego, podemos usar el método inverso en la clase Listas de Guava para invertir la matriz:

public Object[] invertUsingGuava(Object[] array) { List list = Arrays.asList(array); List reversed = Lists.reverse(list); return reversed.toArray(); }

8. Conclusión

En este artículo, analizamos varias formas diferentes de invertir una matriz en Java. Mostramos algunas soluciones que utilizan solo Java central y otras dos soluciones que utilizan bibliotecas de terceros: Commons Lang y Guava .

Todos los ejemplos de código que se muestran aquí se pueden encontrar en GitHub: este es un proyecto de Maven, por lo que debería ser fácil de importar y ejecutar tal como está.