Bonjour,
J’ai créé une classe assez bête qui implémente l’interface Comparable.
J’ai donc créé une méthode compareTo( ) qui semble réaliser son travail entre 2 objets de ma classe, mais pas au sien d’un ArrayList.
En fait, lorsque j’exécute mon petit bout de classe en pas-à-pas, je me rend compte que chaque élément de la collection est comparé avec le suivant, mais pas avec ceux qui suivent.
Voici ma classe :
Lors d’une exécution en pas-à-pas, j’ai une comparaison entre dep1 et dep2, puis entre dep2 et dep3, mais je n’en ai jamais entre dep1 et dep3 ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 package DEFAULT; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Dependance implements Comparable { String nomFichier; ArrayList<String> dependances = new ArrayList<String>(); @Override public String toString() { String description; description = nomFichier + " dépend de"; for (String dep : dependances) { description += " " + dep; } return description; } public int compareTo(Object o) { String nom2 = ((Dependance) o).nomFichier; ArrayList<String> dep2 = ((Dependance) o).dependances; // Si l'objet transmis fait partie des dépendances de l'objet courant // il doit être mis en tête if (this.dependances.contains(nom2)) { return 1; } // Si l'objet courant fait partie des dépendances de l'objet transmis // il doit être mis en tête if (dep2.contains(this.nomFichier)) { return -1; } return 0; } public static void main(String[] args) { List<Dependance> tabDep = new ArrayList<Dependance>(); Dependance dep1 = new Dependance(); Dependance dep2 = new Dependance(); Dependance dep3 = new Dependance(); dep1.nomFichier = "fic1"; dep1.dependances.add("fic25"); dep1.dependances.add("fic30"); dep1.dependances.add("fic50"); tabDep.add(dep1); dep2.nomFichier = "fic2"; dep2.dependances.add("fic15"); dep2.dependances.add("fic30"); dep2.dependances.add("fic50"); tabDep.add(dep2); dep3.nomFichier = "fic25"; dep3.dependances.add("fic15"); dep3.dependances.add("fic30"); dep3.dependances.add("fic50"); tabDep.add(dep3); System.out.println("Liste des éléments avant le tri"); for (Dependance dep : tabDep) { System.out.println(dep.toString()); } Collections.sort(tabDep); System.out.println("Liste des éléments APRES le tri"); for (Dependance dep : tabDep) { System.out.println(dep.toString()); } } }
D’ailleurs, si on inverse l’ordre d’alimentation de la collection : dep2 puis dep1 puis dep3, on peut constater le tri attendu car « Collections.sort(tabDep); » nous retourne bien dep2 puis dep3 puis dep1.
Aurais-je manqué quelque chose dans ce tri afin qu'il compare l'ensemble des éléments entre eux ?
Chris
Partager