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 :

Récupération dans table de hachage d'une clé par une valeur


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 19
    Points : 20
    Points
    20
    Par défaut Récupération dans table de hachage d'une clé par une valeur
    Bonjour à tous,

    J'ai un petit problème que voici :

    J'ai une classe collection qui contient des entrées. Ces entrées sont stockées dans une table de hachage à l'aide de l'identificateur de l'entrée et l'entrée elle même. (Les identificateur des entrées ne se suivent pas forcément)

    J'ai une autre classe qui implémente l'interface TableModel qui contient un objet collection et une table de hachage permettant de faire la correspondance entre les entrées de la collection et l'indice utilisé par exemple par une JTable.
    C'est-à-dire que lorsque, par exemple, ma JTable me demande la valeur à la ligne 10, je vais regarder dans ma table de hachage afin de retourner l'entrée correspondant à la position 10.
    ex. : return collection.get(correspondance.get(10));

    Jusque là tout va bien...

    Le problème viens lorsque je supprime une entrée de ma collection. Je dois avertir mon table model comme quoi l'entrée ayant l'id xxx a été supprimé. Mon table model doit ensuite envoyer un événement à ma JTable pour lui avertir que la ligne xxx a été supprimée.

    Voici comment ça se passe :
    je supprime dans ma collection l'entrée, puis un événement est envoyé (selon le modèle observateur) en passant l'identificateur de l'entrée supprimée.

    J'arrive enfin au problème
    mon tableModel reçoit un événement qui lui donne l'identificateur de l'entrée supprimée. Le problème c'est que la table de hachage ne permet pas de récupérer la clé (ou la liste des clés) correspondant à une valeur (tandis que l'on peut quand même tester l'existence d'une valeur...) et que j'ai besoin justement de la clé pour avertir la JTable de la ligne qui a été supprimée.

    La seule solution que j'ai trouvée est de créer deux tables de hachage faisant le lien dans les deux sens. Mais cette solution ne me plaît pas beaucoup car cela prend plus de place mémoire.

    Est-ce que quelqu'un connaît une meilleure solution? elle serait la bien venue! Merci d'avance.

    P.S.: J'espère que j'ai réussi à me faire comprendre. je peux donner des compléments si vous avez besoin

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 101
    Points : 127
    Points
    127
    Par défaut
    il y a une classe BidiMap dans jakarta commons collections qui fait ce que tu veux très bien :

    http://beuss.developpez.com/tutoriel...s/collections/

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 19
    Points : 20
    Points
    20
    Par défaut
    Super merci bien c'est exactement ce que je voulais.

  4. #4
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Je ne connais pas tellement le contexte du problème, mais il me semble que la conception peut être améliorée...

    "es entrées sont stockées dans une table de hachage à l'aide de l'identificateur de l'entrée et l'entrée elle même."
    ==> Pourquoi ne pas faire une classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Entree {
        TypeID id;
        TypeValue value;
        //accesseurs...
    }
    Et tu ranges ces Entrees dans une ArrayList... comme ça tu n'as pas de problème...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 19
    Points : 20
    Points
    20
    Par défaut
    En fait j'ai stocké tout ça dans une table de hachage afin d'avoir un accès en temps constant. Tandis qu'une liste
    n'a qu'un accès en O(n).

    De plus les entrées d'une collection doivent être accessible par un identificateur, tandis que dans une liste elles seraient accessible selon leur position. du coup pour supprimer une entrée il me faudrait que j'y accède en utilisant liste.get(liste.indexOf(entree)) ce qui double le temps d'accès .

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est bien beau tout ça mais tu oublie un peu la cuisine interne de ta hashmap dans tes calculs de complexité...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 19
    Points : 20
    Points
    20
    Par défaut
    Je suis tout a fait d'accord, mais quand tu sais que lorsque ta JTable va récupérer constamment des informations dans le model, sous prétexte que tu passes la souris sur les cellules ou que tu descends un scroll, agrandi la fenêtre etc... et que tu as pas mal d'informations à afficher, la complexité d'ajout dans la hashmap peut être négligée... enfin c'est ce que je pense.

  8. #8
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par Sebbo
    En fait j'ai stocké tout ça dans une table de hachage afin d'avoir un accès en temps constant. Tandis qu'une liste
    n'a qu'un accès en O(n).
    Non, si ta liste implément RandomAccess (comme ArrayList par exemple), la complexité est en O(1), et en plus, y'a aucun calcul à faire (contrairement au hash).


    En gros, pour get():
    - ArrayList -> O(1)
    - LinkedList -> O(n)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 19
    Points : 20
    Points
    20
    Par défaut
    Tiens je savais pas... merci du renseignement. je vais un peu creuser...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/07/2011, 08h04
  2. Réponses: 1
    Dernier message: 18/03/2011, 18h35
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. [MCD] Lier une Association et une Entité par une Association ?
    Par CDuv-Fr dans le forum Schéma
    Réponses: 8
    Dernier message: 10/07/2009, 01h37
  5. masquer une partie d'une vidéo par une banniere
    Par lezabour dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 16/10/2006, 16h47

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