Plusieurs valeurs de clé dans la table de hachage en Java
Est-il possible de conserver plusieurs valeurs correspondant à une clé dans une table de hachage? Si oui, comment?
- par exemple, en stockant type de conteneur, comme
List
, en tant que valeur. - double possible de HashMap: Une Clé, plusieurs Valeurs
Vous devez vous connecter pour publier un commentaire.
Oui, ceci est appelé la chaîne. Vous voulez éviter de chaînage autant que possible, surtout si la taille de la chaîne commence à augmenter. Plus la taille de chaîne ira à l'encontre de l'objectif même de l'aide d'un hachage de la structure, car le but est de venir en tant que proche de O(1) que possible.
Vous pourriez donner un coup à Goyave bibliothèque (ex-Google collections). Il a implémentations de Multimaps qui peut stocker plusieurs valeurs pour une touche unique.
Par exemple ListMultimap implémentations permet la duplication de paires clé/valeur qui sont conservés dans l'ordre d'insertion.
Voici comment vous pouvez l'utiliser:
Un autre exemple serait cool SetMultimap, qui est très similaire à ListMultimap sauf que les valeurs de clé sont conservés dans un ensemble. (Du point de vue utilisateur, je ne sais pas exactement comment il est mis en œuvre.)
Utilisation
Map<String, List<String>>
.Set
. Ou juste un bon vieux tableau.À proprement parler.
Mais! Vous pouvez avoir autant de votre valeur, une sorte de
Collection
et de l'utiliser pour stocker autant de valeurs que vous souhaitez.Oui, mais seulement si le type de la valeur stockée dans votre
Map
est un tableau ou une Liste:Map<String, List<String>> myMap
ou
Map<String, String[]> myMap
Mais c'est généralement une mauvaise pratique de construire les structures de données générique à l'intérieur les structures de données générique.
Pourquoi ne pas écrire un domaine spécifique de la classe qui encapsule le
HashMap
, et le rend plus facile pour vous de vérifier l'existence d'une valeur, le nombre d'éléments par clé, etc?