Hvordan reversere en matrise i Java

1. Oversikt

I denne raske artikkelen viser vi hvordan vi kan invertere en matrise i Java.

Vi ser noen forskjellige måter å gjøre dette på ved hjelp av rene Java 8-baserte løsninger - noen av dem muterer en eksisterende matrise, og noen lager en ny.

Deretter ser vi på to løsninger ved hjelp av eksterne biblioteker - en bruker Apache Commons Lang og en bruker Google Guava.

2. Definere problemet

Den grunnleggende ideen er å reversere rekkefølgen på elementene i matrisen. Så hvis gitt matrisen:

frukt = {"epler", "tomater", "bananer", "guavaer", "ananas"}

Vi vil gjerne få:

invertedFruits = {"ananas", "guavaer", "bananer", "tomater", "epler"}

La oss se noen måter vi kan gjøre det på.

3. Bruke en tradisjonell til Løkke

Den første måten vi kan tenke å invertere en matrise på er å bruke a til Løkke:

ugyldig 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, koder den gjennom halvparten av matrisen, og endrer elementene i symmetriske posisjoner.

Vi bruker en midlertidig variabel slik at vi ikke mister verdien av den nåværende posisjonen til matrisen under iterasjonen.

4. Bruke Java 8 Strøm API

Vi kan også invertere en matrise ved å bruke Stream API:

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

Her bruker vi metoden IntStream.range for å generere en sekvensiell strøm av tall. Deretter kartlegger vi denne sekvensen i matriseindekser i synkende rekkefølge.

5. Bruke Collections.reverse ()

La oss se hvordan vi inverterer en matrise ved hjelp av Collections.reverse () metode:

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

Sammenlignet med de foregående eksemplene, er dette en mer lesbar måte å gjøre oppgaven på.

6. Bruke Apache Commons Lang

Et annet alternativ for å invertere en matrise er å bruke Apache Commons Lang bibliotek. For å bruke den, må vi først inkludere biblioteket som en avhengighet:

 org.apache.commons commons-lang3 3.5 

Den siste versjonen av Commons Lang kan du finne på Maven Central.

La oss bruke ArrayUtils klasse for å invertere matrisen:

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

Som vi kan se, er denne løsningen ganske enkel.

7. Bruke Google Guava

Et annet alternativ er å bruke Google Guava bibliotek. Akkurat som vi gjorde med Commons Lang, vil vi inkludere biblioteket som en avhengighet:

 com.google.guava guava 22.0 

Den siste versjonen finner du på Maven Central.

Deretter kan vi bruke omvendt metode i GuavaLister klasse for å invertere matrisen:

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

8. Konklusjon

I denne artikkelen så vi på flere forskjellige måter å invertere en matrise i Java. Vi viste noen få løsninger med bare Java-kjerne og to andre løsninger som bruker tredjepartsbiblioteker - Commons Lang og Guava.

Alle kodeeksemplene som vises her, finnes på GitHub - dette er et Maven-prosjekt, så det skal være enkelt å importere og kjøre som det er.


$config[zx-auto] not found$config[zx-overlay] not found