Comment trier un ArrayList avec Comparator en Java

Par défaut, les éléments dans ArrayList sont affichés dans l'ordre de leur insertion dans la liste, mais parfois on a besoin de parcourir ces éléments dans l'ordre croissant ou décroissant. Ce code implémente la méthode Collections.sort() qui fait le tri d'un Arraylist dans l'ordre croissant et décroissant.

Trier ArrayList dans l'ordre croissant

import java.util.ArrayList;
import java.util.Collections;

public class Tri {

public static void main(String[] args) {
ArrayList nontrié = new ArrayList();
nontrié.add("01");
nontrié.add("0A");
nontrié.add("0B");
nontrié.add("ETX");
nontrié.add("00");
nontrié.add("0C");
nontrié.add("NUL");
nontrié.add("05");
nontrié.add("19");
nontrié.add("0001011");

System.out.println("Avant le tri");
for(int i=0; i < nontrié.size(); i++)
System.out.println(nontrié.get(i));

System.out.println("\nAprès le tri");
Collections.sort(nontrié);
for(int i=0; i < nontrié.size(); i++)
System.out.println(nontrié.get(i));
}
}
Sortie:

Avant le tri
01
0A
0B
ETX
00
0C
NUL
05
19
0001011

Après le tri
00
0001011
01
05
0A
0B
0C
19
ETX
NUL

Trier ArrayList dans l'ordre décroissant

La classe Collections possède une autre méthode Collections.sort(List<T>, Comparator<T>) qui permet de trier un ArrayList dans l'ordre croissant et décroissant. Cette fonction utilise un comparateur d'objets qui à chaque fois compare deux objets avec la fonction o1.compareTo(o2).

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Tri {

public static void main(String[] args) {
ArrayList nontrié = new ArrayList();
nontrié.add("11000000");
nontrié.add("10101000");
nontrié.add("00000001");
nontrié.add("00001111");
nontrié.add("00001100");
nontrié.add("00001111");
nontrié.add("11111111");
nontrié.add("11111100");
nontrié.add("00000000");
nontrié.add("00000011");
nontrié.add("00001110");

System.out.println("Avant le tri");
for(int i=0; i < nontrié.size(); i++)
System.out.println(nontrié.get(i)+" ");

System.out.println("\nAprès le tri");

Collections.sort(nontrié, new Comparator() {
@Override
public int compare(String s1, String s2)
{
/*s2 comparée à s1 pour que l'ordre soit décroissant
return s2.compareTo(s1);
}
});
for(int i=0; i < nontrié.size(); i++)
System.out.println(nontrié.get(i)+" ");
}
}
Sortie:

Avant le tri
11000000
10101000
00000001
00001111
00001100
00001111
11111111
11111100
00000000
00000011
00001110

Après le tri
11111111
11111100
11000000
10101000
00001111
00001111
00001110
00001100
00000011
00000001
00000000
Références:
American Standard Code for Information Interchange
Documentation Collections.sort
stackOverFlow:How to sort a ArrayList in java