[Algo] idée de classement
Bonjour
Cette fois, j'ai un petit problème de conception ou plutôt d'idée.
Voici mon problème, supposons que je dispose d'une ArrayList d'objets. Ces objets contiennent un tableau dont je mesure la taille. Ce que je voudrais, c'est pouvoir classer ces objets dans une autre structure (c'est là que j'hésite) en fonction de cette taille du tableau (mettons du plus petit au plus grand). Mon problème vient aussi sur la prévision des cas où les tailles sont égales.
Merci d'avance de vos suggestions et conseils.
@++
Re: [Algo] idée de classement
Salut,
Dans un premier temps il faut te créer un objet Comparator :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class MyObjectComparator implements Comparator {
public int compare (Object o1, Object o2) {
MyObject object1 = (MyObject) o1;
MyObject object2 = (MyObject) o2;
if (object1.getSize() < object2.getSize()) {
return -1;
}
if (object1.getSize() > object2.getSize()) {
return 1;
}
return 0;
}
} |
La méthode compare() doir renvoyer :
- un nombre négatif si o1 < o2
0 si o1 == o2
un nombre positif si o1 > o2
Ensuite il te suffit d'utiliser la méthode Collections.sort() pour trier ta liste avec ce comparator :
Code:
1 2 3 4 5
| // Creation d'une copie de la liste :
List copie = new ArrayList(list);
// Trie de la copie :
Collections.sort(copie, new MyObjectComparator()); |
Citation:
Envoyé par GLDavid
Mon problème vient aussi sur la prévision des cas où les tailles sont égales.
Dans mon exemple ils resteront dans l'ordre d'apparition car compare() renvoit 0. Tu peux eventuellement éviter de renvoyer zéro en utilisant alors une autre propriété de tes objets pour les différencier...
a++