Sådan vendes en matrix i Java

1. Oversigt

I denne hurtige artikel viser vi det hvordan vi kan invertere et array i Java.

Vi ser et par forskellige måder at gøre dette på ved hjælp af rene Java 8-baserede løsninger - nogle af dem muterer et eksisterende array og andre skaber en ny.

Dernæst ser vi på to løsninger ved hjælp af eksterne biblioteker - den ene bruger Apache Commons Lang og en bruger Google Guava.

2. Definition af problemet

Grundideen er at vende rækkefølgen af ​​elementerne i arrayet. Så hvis matrixen gives:

frugt = {"æbler", "tomater", "bananer", "guavaer", "ananas"}

Vi vil gerne få:

invertedFruits = {"ananas", "guavaer", "bananer", "tomater", "æbler"}

Lad os se nogle måder, vi kan gøre det på.

3. Brug af en traditionel til Sløjfe

Den første måde, vi måske tænker på at invertere en matrix, er ved at bruge a til løkke:

ugyldigt 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; }}

Som vi kan se, gentager koden gennem halvdelen af ​​arrayet og ændrer elementerne i symmetriske positioner.

Vi bruger en midlertidig variabel, så vi ikke mister værdien af ​​matrixens aktuelle position under iterationen.

4. Brug af Java 8 Strøm API

Vi kan også invertere en matrix ved hjælp af Stream API:

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

Her bruger vi metoden IntStream.range at generere en sekventiel strøm af tal. Derefter kortlægger vi denne sekvens i matrixindekser i faldende rækkefølge.

5. Brug Collections.reverse ()

Lad os se, hvordan man inverterer et array ved hjælp af Collections.reverse () metode:

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

Sammenlignet med de foregående eksempler er dette en mere læselig måde at udføre opgaven på.

6. Brug af Apache Commons Lang

En anden mulighed for at invertere en matrix er at bruge Apache Commons Lang bibliotek. For at bruge det skal vi først inkludere biblioteket som en afhængighed:

 org.apache.commons commons-lang3 3.5 

Den seneste version af Commons Lang kan findes på Maven Central.

Lad os bruge ArrayUtils klasse for at invertere arrayet:

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

Som vi kan se, er denne løsning ret enkel.

7. Brug af Google Guava

En yderligere mulighed er at bruge Google Guava bibliotek. Ligesom vi gjorde med Commons Lang, inkluderer vi biblioteket som en afhængighed:

 com.google.guava guava 22.0 

Den seneste version kan findes på Maven Central.

Derefter kan vi bruge baglæns metode i GuavaLister klasse for at invertere arrayet:

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

8. Konklusion

I denne artikel så vi på flere forskellige måder at invertere et array i Java. Vi viste nogle få løsninger, der kun bruger Java-kerner og to andre løsninger, der bruger tredjepartsbiblioteker - Commons Lang og Guava.

Alle kodeeksempler vist her kan findes på GitHub - dette er et Maven-projekt, så det skal være let at importere og køre som det er.