Comment inverser un tableau de int/String en Java

Dans ce tutoriel, nous allons voir comment inverser les éléments d'un tableau en Java.

Inverser un tableau peut paraître très facile! Il parait comme ça parce que vous ce que vous avez besoin de faire est de créer un tableau de la même taille, parcourir le tableau original de la fin au début et remplir le nouveau tableau, et c'est tout! Vous avez eu un tableau dont ses éléments sont dans l'ordre inverse du tableau original, mais le problème est que vous avez utiliser un tableau additionnel ici qui va occuper beaucoup d'espace s'il est très grand de complexité O(n). Imaginez que votre tableau contient 1 millions d'éléments et vous n'avez pas assez d'espaces. La question est ce qu'on peut inverser le tableau sans faire recours à un tableau additionnel qui prend beaucoup de place? La clé de la solution ici est de comprendre ce qu'on a besoin pour inverser le tableau sans utiliser un buffer temporaire, mais on peut utiliser une variable pour stocker des valeurs.

Vous pouvez aussi utiliser directement des libraires open source ou des méthodes de la classe java.util.Arrays ou java.util.Collections.

Revenons à la méthode manuelle qui consiste à échanger des éléments jusqu'à atteindre le point de milieu, en stockant à chaque fois dans la variable temporaire la valeur courante pour éviter de l'écraser comme ceci:

public class reverse_Array {

public static void main(String[] args) {
int[] array ={1, 2, 3, 4};

//afficher les entiers du tableau
for(int i = 0; i < array.length; i++)
{
System.out.println(array[i]);
}
//inverser les éléments du tableau
for(int i = 0; i < array.length / 2; i++)
{
int temp = array[i];
array[i] = array[array.length - i - 1];
array[array.length - i - 1] = temp;
}
//afficher les entiers du tableau inversé
System.out.println("tableau inversé");
for(int i = 0; i < array.length; i++)
{
System.out.println(array[i]);
}
}
}
La compilation et l'exécution de ce code donne ce résultat:

1
2
3
4
tableau inversé
4
3
2
1
Pourquoi on arrête au milieu ? Parce que quand on atteint le milieu, on vient d'inverser toutes les valeurs et si vous continuez jusqu'à la fin du tableau, vous inversez chaque éléments deux fois, alors le résultats est le même.

Inverser un tableau en Java avec la méthode ArraysUtils.reverse()

En utilisant la librairie Java de Commons lang l'API java.lang qui contient des méthodes notament pour la manipulation des String, des méthodes nuumériques...Cliquez pour télécharger l'api java.lang et importer la dans votre projet.

On peut facilement utiliser la méthode ArrayUtils.reverse(int[] array)

import java.util.Arrays;
import org.apache.commons.lang3.ArrayUtils;

public class reverse_array_strings {

public static void main(String[] args) {
String[] string_array ={"a", "b", "c"};

//afficher les strings du tableau
for(int i = 0; i < string_array.length; i++)
{
System.out.println(string_array[i]);
}
//inverser les éléments du tableau
ArrayUtils.reverse(string_array);

//afficher les strings du tableau inversé
System.out.println("tableau inversé");
for(int i = 0; i < string_array.length; i++)
{
System.out.println(string_array[i]);
}
}
}
Voici ce que ce code donne en sortie:

a
b
c
tableau inversé
c
b
a
La plupart du temps, il est plus rapide et plus sécurisé d'utiliser facilement une librarie parce qu'elle vous évite les erreurs et elle est testée par ses éditeurs.

utiliser la méthode Collections.reverse()

Cette méthode marche seulement pour les collections d'objets java, c'est pour cela qu'on doit convertir notre tableau en java.util.List avec la méthode Arrays.asList(), ensuite on appelle la méthode Collections.reverse() et enfin convertir l'objet List en un tableau avec la méthode toArray().

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class reverse_array_list {
public static void main(String[] args) {
Object[] string_objects ={"abc", 12, 54, 'c', 99};

//afficher les strings du tableau
for(int i = 0; i < string_objects.length; i++)
{
System.out.println(string_objects[i]);
}

//convertir le tableau en une List
List<Object> list = Arrays.asList(string_objects);
//inverser les objets du tableau
Collections.reverse(list);
//obtenir le tableau à partir de la liste
string_objects = list.toArray();

//afficher les strings du tableau inversé
System.out.println("tableau d'objets inversé");
for(int i = 0; i < string_objects.length; i++)
{
System.out.println(string_objects[i]);
}
}
}
Résultat:

abc
12
54
c
99
tableau d'objets inversé
99
c
54
12
abc
Références:
Stackoverflow: How do I reverse an int array in Java?
Commons lang : Java.lang API
How to reverse array in place in Java?