Comment inverser une Collection d'objets en Java

Cet exemple montre comment inverser le contenu d'une LinkedList en appelant la méthode de la classe Collections: Collections.reverse() . On a choisit comme collection d'objets LinkedList. La meme méthode s'applique aussi sur les autres collections qui héritent de l'interface java.util.Collection. Il faut faire passer l'instance de LinkedList comme paramètre. Cette méthode est utilisée pour inverser l'ordre des éléments dans la liste.

Exemple:

Ce code traite les trois collections d'objets java suivantes: ArrayList, LinkedList et Vector.

import java.util.Collections;
import java.util.LinkedList;

public class inverse_collection {

public static void main(String[] args) {

LinkedList llist = new LinkedList();

llist.add("1");
llist.add("2");
llist.add("3");
llist.add("4");

System.out.println("Avant l'inversion : "+llist);

Collections.reverse(llist);

System.out.println("Après l'inversion : "+llist);
}
}
Résultat:

Avant l'inversion : [1, 2, 3, 4]
Après l'inversion : [4, 3, 2, 1]
Les collections qui héritent de java.util.Set et java.util.Map ne sont pas prises en charge par la méthode Collections.reverse(). toutefois, une solution partielle est possible:
  • Créer une instance de ArrayList avec une collection de l'interface Set ou Map
  • Appliquer la méthode Collections.reverse() sur l'instance ArrayList
  • Les éléments ne peuvent pas être recopiés dans la collection originale. Pourquoi ? Parce que l'interface Set ne garantie pas l'ordre d'insertion.
Remarque: L'interface Map est une table de hachage clé/valeur. Ce qui veut dire qu'on a seulement le choix d'inverser soit les clé, soit les valeurs sans recopier les résultat dans la collection qui implémente Map, parce qu'il ne garde pas l'ordre des éléments.

Exemple de TreeSet:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;

public class Intervertir {

public static void main(String[] args) {

// création de TreeSet
TreeSet tset = new TreeSet();

// ajouter des éléments à treeset
tset.add("a");
tset.add("b");
tset.add("c");

Iterator iterator = tset.iterator();

// affichage des éléments de TreeSet
System.out.println("Les éléments de treeset dans l'ordre croissant: ");
while (iterator.hasNext()){
System.out.println(iterator.next());
}

List list = new ArrayList(tset);

Collections.reverse(list);

// affichage des valeurs à l'inverse
System.out.println("Les éléments de treeset dans l'ordre inverse: ");
for(String s:list)
System.out.println(s);
}
}
Sortie:

Les éléments de treeset dans l'ordre croissant: 
a
b
c
Les éléments de treeset dans l'ordre inverse:
c
b
a