Téléchargement
illégal
Posez votre question Signaler

Trier une arraylist [Résolu]

occhilupo 8Messages postés 26 novembre 2007Date d'inscription 15 novembre 2010Dernière intervention - Dernière réponse le 4 juil. 2011 à 16:30
Bonjour,
j'ai un petit souci pour trier une arraylist, je m'explique j'ai une classe joueur :
public class Joueur {
int reg;
int departement;
int point;
String nom;
.......
}
puis une autre classe ou j'ai une arraylist de la classe Joueur
public class execl{
ArrayList Joueur=new ArrayList();
........
}
J'ajoute plusieurs Joueur à mon ArrayList avec la methode add(), puis je voudrais trier mon arraylist par ordre decroissant des points de chaque joueur, mais c'est je ne sais pas comment fair.
Est ce que quelqu'un pourrait m'aider??
Merci
occhi.
Lire la suite 

Trier une arraylist »

Suggestions
9 réponses
Réponse
+18
moins plus
Bonjour,

Il faut que ta classe joueur implémente l'interface IComparable.
Dans ta classe "joueur", il faudrait que tu crées une méthode compareTo(Joueur autreJoueur) qui renvoie 1 si le joueur "This" est plus grand que le joueur autreJoueur (grand au sens que tu désires), 0 si les joueurs sont à égalité, -1 sinon.

Ensuite, il te suffit, avec ton arraylist (que je n'appellerais pas Joueur à ta place ! Tu donnes le même nom qu'à la classe Joueur, ce n'est pas une bonne idée), d'appeler sa méthode .Sort()

Ce qui donnerait quelque chose comme ça pour la classe Joueur :
public class Joueur Implements IComparable {

int reg;
int departement;
int point;
String nom;
.......

   Public Int CompareTo(Joueur autreJoueur)
   {
      int resultat;
      if (this.point > autrejoueur.point)
         resultat = 1;
      if (this.point < autrejoueur.point)
         resultat = -1;
      if (this.point == autrejoueur.point)
         resultat = 0;
      return resultat;
   }
} 
Et comme ça pour ton arraylist :
public class execl{

ArrayList LesJoueurs = new ArrayList();
........
LesJoueurs.Add();
LesJoueurs.Add();
LesJoueurs.Add();
LesJoueurs.Add();
........
LesJoueurs.Sort();
} 
Si tu veux trier autrement, modifie juste la fonction CompareTo() pour mettre ce que tu veux dedans.

Xavier
Ajouter un commentaire
Réponse
+6
moins plus
Voilà une réponse pour ta question (même si en 3 ans tu as surement eu le temps de la trouver tout seul). J'ai repris ça de mon code, je te laisse l'adapter pour ta classe Joueur.

Premièrement, essaie d'utiliser la généricité:

ArrayList<UserCreateInfo> lst = new ArrayList<UserCreateInfo>(usersToCreate);


Ensuite tu peux créer des comparateurs en implémentant l'interface Comparator puis tu peux l'utiliser avec la méthode Collections.sort:

Collections.sort(lst, new Comparator<UserCreateInfo>()
{
    public int compare(UserCreateInfo o1, UserCreateInfo o2)
    {
         return o1.getUsername().compareTo(o2.getUsername());
    }
});


Ceci permet d'avoir plusieurs comparateurs différent. Evidemment chaque comparateur peut être stocké dans des variables statiques pour ne pas les créer à chaque fois.
Ajouter un commentaire
Réponse
+2
moins plus
Topic ancien mais il est évident qu'il manque une réponse au premier post.
Pour avoir une liste triée, autant réduire le nombre d'actions plutôt que de faire plusieurs fois la même chose. Ici on fait 3 actions:
1. Récupération des enregistrements.
2. Ajout des enregistrements dans la liste.
3. Trie de la liste selon une variable d'un objet java.

N'oubliez pas que SQL peux le faire pour vous, avec la bonne vielle méthode ORDER BY en fin de requête sur le champs qui vous intéresse. Comme ça on diminue le nombre d'opérations :
1. Récupération des enregistrements triés.
2. Ajout des enregistrements dans la liste.
Et on gagne en temps d'exécution (ORDER BY moins long qu'un ArrayList.sort()).

Ensuite, si l'intérêt du topic était juste de connaitre une méthode pour trier une ArrayList, ma technique est inutile mais ce n'est pas clairement spécifié dans le post initial.

@+
Reivax962- 12 juil. 2010 à 15:34
Bonjour,

Vous avez raison, sauf... que rien n'indique dans le message initial que l'on a une base de données ! ;)

Xavier
coffee - 4 juil. 2011 à 16:19
Ca ne répond en rien à la question posée.
Ajouter un commentaire
Réponse
+0
moins plus
Merci Reivax pour ton aide mais j'ai une autre petite question.
Le truc c'est que je veux pas seulement pouvoir trier par ordre de point mais aussi par ordre alphabetique et autre...,
donc enfaite il faudrait que j'ai plusieurs methodes comparto() dans la meme class ???!!!!
Ou est ce que je peux spécifier la methode de trie à utiliser en appelant Sort()??

Si qql1 peut m'aider, merci à lui.

Francis.
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

Je n'ai pas l'impression que le Sort() permette de spécifier d'autres arguments.
Reste donc la possibilité évoquée par vlmath, à savoir de coder toi-même ton algorithme de tri...

Désolé :-/

Xavier
Ajouter un commentaire
Réponse
+0
moins plus
ok, merci xavier, ta solution marche nickel.

Francis
Ajouter un commentaire
Réponse
-2
moins plus
Salut,

Il existe plusieur algorithmes de tri. En voici quelques'un.

@Bientôt
Ajouter un commentaire
Ce document intitulé « trier une arraylist » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?