ArrayList globalement non triée
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:
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