Hashtable : plusieurs valeurs pour une clé ?
lesly78
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
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...
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...
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 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...