Hashtable : plusieurs valeurs pour une clé ?
Fermé
lesly78
-
23 nov. 2011 à 19:24
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 24 nov. 2011 à 17:14
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 24 nov. 2011 à 17:14
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
23 nov. 2011 à 20:16
23 nov. 2011 à 20:16
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...
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...
24 nov. 2011 à 17:01
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 ?
24 nov. 2011 à 17:14
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...