Hashtable : plusieurs valeurs pour une clé ?
lesly78
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
en Java, dans un hashtable, je stocke deux valeurs pour une meme clé :
monHashtable.put("maCle", 1);
monHashtable.put("maCle", 2);
Comment, à partir de la clé, puis-je lister toutes les valeurs correspondantes ? Je n'arrive qu'à retourner une valeur avec :
monHashtable.get("maCle");
//retourne 1
J'aimerais pouvoir vérifier s'il y a plusieurs valeurs, et si c'est le cas, les retourner. Pourriez-vous me venir en aide ?
merci beaucoup !
en Java, dans un hashtable, je stocke deux valeurs pour une meme clé :
monHashtable.put("maCle", 1);
monHashtable.put("maCle", 2);
Comment, à partir de la clé, puis-je lister toutes les valeurs correspondantes ? Je n'arrive qu'à retourner une valeur avec :
monHashtable.get("maCle");
//retourne 1
J'aimerais pouvoir vérifier s'il y a plusieurs valeurs, et si c'est le cas, les retourner. Pourriez-vous me venir en aide ?
merci beaucoup !
2 réponses
-
En effet put efface la valeur précédente si la clé est la même. Et pour info, la valeur que retourne la méthode correspond à la valeur précédemment stockée.
Remarque : à part si tu utilises des Threads et que tu as besoin d'avoir des données synchronisées, je te conseilles d'utiliser HashMap, qui fait exactement pareil que Hashtable à part qu'elle est non-synchronisée donc il y a moins de contrôle et c'est plus rapide ;-)
Si tu veux avoir plusieurs valeurs pour une même clé, tu peux utiliser des Collection imbriquées, ce sera bien mieux qu'utiliser des tableaux.
Par exemple : HashMap<String,HashSet<Integer>>, HashMap<String,LinkedList<Integer>>
Le choix de la Collection est important du point de vue de l'efficacité, mais il faut savoir ce que font chacune et adapter à ton problème...-
Merci beaucoup pour votre aide, je vais chercher un peu plus loin du côté de ces structures de données :) Je ne comprends pas ce que sont des Threads mais je vais plancher un peu, et je ne comprends pas non plus ce que vous appelez par "non syncronisée" ^^
En voulant tourner le problème d'un autre coté, j'ai décidé de stocker un entier (qui sera unique donc autant le mettre en clef), et une chaine de caractère dans mon hashtable :
monHashtable.put(1,"maString1");
monHashtable.put(7,"maString3");
Dans mon algorithme, j'ai besoin de récupérer la clé qui correspond à mon String. Je n'ai trouvé que cette méthode pour y parvenir : je liste tout le hashtable, et si la valeur en cours correspond à ma String, je note la clé (ce qui est catastrophiquement intolérable du point de vue de la complexité).
Je suppose qu'il n'y a aucun moyen de trouver la clé qui correspond à une valeur ? -
Si tu ne sais pas ce que sont des Thread ou la synchronisation, alors c'est que tu peux remplacer Hashtable par HashMap sans souci ^^
Si tu as besoin de récupérer la clé qui correspond à ton String, c'est que tu t'es trompé et que la clé c'est le String et non la valeur. Après rien ne t'empêche d'avoir deux HashMap, l'une <Integer,String> et l'autre <String,Integer>. Il faudrait savoir ce que tu veux faire exactement...
-
-
en fait je pense que le deuxième "put" écrase le premier... dites moi si je vise juste, merci ;)
dans ce cas là, il vaudrait mieux ne pas stocker un <String, Integer> mais un String avec un tableau d'entiers ?