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 :

hashtable et tri


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut hashtable et tri
    Bonjour,
    J'ai un petit problème de tri, je vous explique mon problème.
    J'ai une structure avec entre autre un nom de type string et un ordre de type int (plus d'autres choses non importante dans le cadre de mon probleme).
    Je dois rajouter dans un vecteur les noms mais dans l'ordre correspondant à ordre. Le problème est que hashtable fait une énumeration un peu aléatoire ( ordre correspond en fait à l'ordre d'entrée dans la table mais l'enumeration n'en tient pas compte).
    Pour info le numéro d'ordre peut être supérieur au nombre d'élément dans la table de hachage.
    Pour l'instanct j'ai une focntion qui marche mais est un pas top, en fait je fais une premiere énumération pour obtenir le numéro d'ordre max, je crée un tableau de cette longueur.
    Je parcours mon tableau pour tout mettre à nul, ensuite je reparcours ma table de hachage en inserant dans mon tableau à l'indice correspondant à l'ordre mon nom.
    Je parcours ensuite ce tableau et si la valeur n'est pas nul, je rajoute dans mon vecteur la valeur du tableau.
    Ainsi je me retrouve avec un vecteur ayant tout mes noms triés.
    Le problème n'est pas tant le temps d'éxecution, je n'aurais normalement jamais plus d'une dizaine d'élément, le truc c'est que je trouve pas ca tres jolie, et pour des programmes futurs une manière plus rapide pourrait me servir.
    Donc si vous avez des idées...

  2. #2
    Membre expérimenté Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par défaut
    'jour,
    Je suis pas sûr d'avoir bien compris ton problème, mais voilà peut-être qque chose qui pourrait t'aider.

    Tu fais implémenter comparator à ta classe. Tu redéfinies l'ordre en prenant en compte ton entier.

    Tu insères dans une ArrayList tous tes éléments sans te soucier de l'ordre. Ensuite, tu utilises la méthode Collections.sort(taList); et là, normalement, tes élements devraient être triés.

  3. #3
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Peut-être que les interfaces SortedMap et SortedSet correspondent à ta problématique.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  4. #4
    Membre confirmé
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    110
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 110
    Par défaut
    Salut,

    +1 avec le y@m's :-)
    J'ai utilisé un treeset récemment et ca marche impec: ton ensemble de donnée est trié sur la clé.
    De plus si la clef n'est pas une partie de l'objet, tu peux recupérer un ensemble de Entry qui te permet d'avoir key et value :-) (methode entrySet() je crois)

    Dom

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut
    Je sais pas si je vous ai bien compris, mais j'ai l'impression que votre solution permet de trier sur la clé or ce n'est pas ce que je recherche.
    j'ai une structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Struct {
    string nom;
    int ordre;
    ....
    }
    et ma table de hachage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table{cle:nom;valeur:struct}
    Et moi je dois faire un tri sur l'ordre.

    Merci par avance.

  6. #6
    Membre confirmé
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    110
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 110
    Par défaut
    Citation Envoyé par piro
    J'ai une structure avec entre autre un nom de type string et un ordre de type int (plus d'autres choses non importante dans le cadre de mon probleme).
    Je dois rajouter dans un vecteur les noms mais dans l'ordre correspondant à ordre. ...
    Pour info le numéro d'ordre peut être supérieur au nombre d'élément dans la table de hachage.
    ...
    Salut,
    Pour mieux comprendre, il faudrait que tu définisses les opérations que tu vas effectuer sur ta structure de donnée et lesquels doivent Être performantes. (find, insert, ...)
    Et surtout de quel type de structure viennent tes données, et si tu dois trié tous les noms ou si tu veux juste trié une partie
    tu as 10 000 struct, et tu veux en sortir 10 puis les avoir dans le bon ordre
    tu as 10 000 struct qui doivent être trié
    Quelques pistes:
    Ce que tu décris c'est un ensemble de données dont l'ordre naturel ers basé sur ordre (sinon tu peux juste definir un Comparator):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Struct implements Comparable<Struct>{
        private Integer ordre;
        private String nom;
        public int compareTo(Struct o) {
            return ordre.compareTo(o.ordre);
        }
        ...
    Obs: Il faut bient lire javadoc sur Comparable (Comparator)à propos de hashCode et equals.
    Après ca tu peux avoir ton ensemble dans:
    • un SortedSet comme a proposé le y@m's
    • un arrayList, que tu tries à la fin avec Collection.sort() comme a proposé Vincent63

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    List<Struct> maListe = new ArrayList<Struct>();
    remplit(maListe);
    Collections.sort(maListe);
    En espérant que ca t'aide
    Dom

Discussions similaires

  1. Probleme de tri d'une Hashtable
    Par Dazdh dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 26/03/2009, 16h59
  2. Tri sur les valeurs d'une HashTable avec duplicats
    Par extenbrisadlucem dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 01/08/2008, 11h41
  3. Tri d'un Hashtable
    Par dimainfo dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 21/06/2007, 17h16
  4. tri d'un Hashtable
    Par titan_33 dans le forum C#
    Réponses: 1
    Dernier message: 29/01/2007, 13h03

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