IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Besoin de conseils pour un tri


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Points : 114
    Points
    114
    Par défaut Besoin de conseils pour un tri
    Salut !


    J'ai un petit souci pour faire un choix et j'aimerais vos conseils :

    Dans le cadre d'un jeu, je dois tenir une liste des meilleurs scores; moi, j'ai créé une classe qui contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Scores {
     
        private String nom;
        private long temps;
     
        public Scores(String nom, long temps) {                
            this.nom = nom;
            this.temps = temps;
        }
    ...
    }
    Je voudrais, en fin de partie, faire un tri sur les scores (=temps de résolution d'une grille de sudoku).

    Je ne sais pas très bien quoi employer pour faire cela; moi je pensais utiliser une collection pour stocker les infos sur forme de clé/valeur (la clé etant le nom).

    Problème: il peut y avoir aussi bien des doublons pour le nom que pour le score donc ça me parait compromis ... (puisque la clé signifie "unique").

    Que pourrais-je employer d'autre qui à la fois me permette de trier sur un champ tout en gardant le lien entre le nom et le score ?

    Merci d'avance !

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Pourquoi utiliser une Map ? Une List serait plus approprié...

    Ensuite la solution la plus simple pour trier une List, c'est d'utiliser la méthode Collections.sort() et d'implémenter l'interface Comparable dans ton objet (code Java 5.0) :
    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
    public class Score implements Comparable<Score> {
     
        private String nom;
        private long temps;
     
        public Score(String nom, long temps) {                
            this.nom = nom;
            this.temps = temps;
        }
     
        public int compareTo(Score o) {
            if (this.temps == o.temps) {
                return 0;
            } else if (this.temps < o.temps) {
                return -1;
            }
            return 1;
        }
    }
    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            List<Score> scores = new ArrayList<Score>();
     
            scores.add( new Score("Fred", 1200) );
            scores.add( new Score("Eric", 900) );
     
            // Tri de la liste :
            Collections.sort(scores);

    Et si tu n'utilises pas encore Java 5.0 :
    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
    public class Score implements Comparable {
     
        private String nom;
        private long temps;
     
        public Score(String nom, long temps) {                
            this.nom = nom;
            this.temps = temps;
        }
     
        public int compareTo(Object other) {
            if (other instanceof Score) {
                Score o = (Score) other;
                if (this.temps == o.temps) {
                    return 0;
                } else if (this.temps < o.temps) {
                    return -1;
                }
            }
            return 1;
        }
    }
    a++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Points : 114
    Points
    114
    Par défaut
    t'écris dans toutes les versions, toi !!

    Un grand merci pour ta contribution simple et efficace !!
    Sinon, petite question : comment se fait-il qu'on ne doive plus faire de test sur la nature de l'objet avec la version 5.0 ?

  4. #4
    Membre actif Avatar de @ldehan
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Points : 278
    Points
    278
    Par défaut
    Citation Envoyé par Mike888
    Sinon, petite question : comment se fait-il qu'on ne doive plus faire de test sur la nature de l'objet avec la version 5.0 ?
    grace a la généricité :
    http://lroux.developpez.com/article/...ge_5#Lgenerics

  5. #5
    Membre expérimenté

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 1 374
    Points
    1 374
    Par défaut
    Et pour faire un tri alphabétique rapidement, vous vous appuyerez sur quoi ?

    Merci d'avance

  6. #6
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Sur un "SortedSet", ou une "SortedMap" (sur la clé) : et la méthode int String.compareTo(Object) ...

  7. #7
    Membre expérimenté

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 1 374
    Points
    1 374
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin de conseils pour changer de configuration matériel
    Par lnplnp dans le forum Ordinateurs
    Réponses: 9
    Dernier message: 17/04/2006, 23h27
  2. Besoin de conseils pour une application
    Par peredodu dans le forum Access
    Réponses: 9
    Dernier message: 05/03/2006, 11h18
  3. Réponses: 13
    Dernier message: 13/09/2005, 09h41
  4. Réponses: 4
    Dernier message: 20/05/2005, 13h30
  5. Réponses: 3
    Dernier message: 24/12/2004, 12h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo