Come invertire un array in Java

1. Panoramica

In questo rapido articolo, mostreremo come possiamo invertire un array in Java.

Vedremo diversi modi per farlo utilizzando soluzioni basate su Java 8 pure: alcuni di questi mutano un array esistente e altri ne creano uno nuovo.

Successivamente, esamineremo due soluzioni che utilizzano librerie esterne: una che utilizza Apache Commons Lang e una che utilizza Google Guava .

2. Definizione del problema

L'idea di base è invertire l'ordine degli elementi nell'array. Quindi, se viene fornito l'array:

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

Ci piacerebbe ottenere:

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

Vediamo alcuni modi in cui possiamo farlo.

3. Utilizzo di un tradizionale ciclo for

Il primo modo in cui potremmo pensare di invertire un array è usare un ciclo 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; } }

Come possiamo vedere, il codice itera attraverso metà dell'array, cambiando gli elementi in posizioni simmetriche.

Usiamo una variabile temporanea in modo da non perdere il valore della posizione corrente dell'array durante l'iterazione.

4. Utilizzo di Java 8 Stream API

Possiamo anche invertire un array utilizzando l'API Stream:

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

Qui usiamo il metodo IntStream.range per generare un flusso sequenziale di numeri. Quindi mappiamo questa sequenza in indici di array in ordine decrescente.

5. Utilizzo di Collections.reverse ()

Vediamo come invertire un array utilizzando il metodo Collections.reverse () :

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

Rispetto agli esempi precedenti, questo è un modo più leggibile per eseguire l'attività.

6. Utilizzo di Apache Commons Lang

Un'altra opzione per invertire un array consiste nell'usare la libreria Apache Commons Lang . Per usarlo, dobbiamo prima includere la libreria come dipendenza:

 org.apache.commons commons-lang3 3.5 

L'ultima versione di Commons Lang può essere trovata su Maven Central.

Usiamo la classe ArrayUtils per invertire l'array:

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

Come possiamo vedere, questa soluzione è abbastanza semplice.

7. Utilizzo di Google Guava

Un'altra opzione è utilizzare la libreria Google Guava . Proprio come abbiamo fatto con Commons Lang , includeremo la libreria come dipendenza:

 com.google.guava guava 22.0 

L'ultima versione può essere trovata su Maven Central.

Quindi, possiamo usare il metodo inverso nella classe Lists di Guava per invertire l'array:

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

8. Conclusione

In questo articolo, abbiamo esaminato diversi modi per invertire un array in Java. Abbiamo mostrato alcune soluzioni che utilizzano solo Java core e altre due soluzioni che utilizzano librerie di terze parti: Commons Lang e Guava .

Tutti gli esempi di codice mostrati qui possono essere trovati su GitHub: questo è un progetto Maven, quindi dovrebbe essere facile da importare ed eseguire così com'è.