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 :
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());
        }
    }
}
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 ???

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