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.