2009-06-27 7 views
3

Est-il possible d'avoir plusieurs valeurs, pour une seule clé, dans la classe de dictionnaire Java?Classe de dictionnaire

+0

Voir ma réponse ci-dessous concernant le dictionnaire - il est considéré comme une classe obsolète. – Uri

+0

Qu'est-ce que la classe Java Dictionary? Voulez-vous dire Hashtable? –

+0

Cela ressemble à une rediffusion de cette question: http://stackoverflow.com/questions/1049833/multi-valued-hashtable-in-java, posté quelque 12 heures plus tôt. Les deux ont été demandés par quelqu'un nommé Raji, mais en utilisant différents comptes non enregistrés. – Jonik

Répondre

2

Bien sûr. Utilisez une liste comme valeur.

2

Vous pouvez utiliser une Map régulière et ont les valeurs soient Collection s:

Map<Integer, List<String>> map = new HashMap<Integer, List<String>>(); 

map.put(0, Arrays.asList("foo", "bar")); 
map.put(1, new ArrayList<String>()); 

map.get(1).add("blag"); 

Ou vous pouvez utiliser MultiMap à partir du Apache Commons Collections .

Un MultiMap est un Map avec une sémantique légèrement différente. Mettre une valeur dans la carte ajoutera la valeur à Collection à cette clé. Obtenir une valeur retournera un Collection, contenant toutes les valeurs mises à cette clé.

Par exemple:

MultiMap mhm = new MultiHashMap(); 
mhm.put(key, "A"); 
mhm.put(key, "B"); 
mhm.put(key, "C"); 
Collection coll = (Collection) mhm.get(key); 

coll sera une collection contenant "A", "B", "C".

(Malheureusement, MultiMap n'utilise pas génériques.)

+0

vous ne pouvez pas utiliser le type "int" en tant que paramètre générique, car il s'agit d'un type primitif. Utilisez Integer à la place. – cd1

+0

+1 pour les exemples de codes. – akarnokd

+1

Google Collections serait beaucoup préférable à Apache Commons Collections. Il est implémenté avec des génériques et d'autres fonctionnalités de Java 5, et semble globalement être une meilleure extension pour le framework de collections Java. Voir http://www.javalobby.org/articles/google-collections/ (recherche pour "Apache Commons") – Jonik

3

D'abord, en ce qui concerne la classe dictionnaire: Cette classe est considérée comme obsolète, la documentation recommande l'utilisation de la carte à la place.

Ce type de collection que vous cherchez s'appelle un multimap. Vous pouvez en mettre un vous-même avec une liste, mais c'est fastidieux.

Vous pouvez utiliser un MultiMap à partir de Collections Apache ou de Google Collections. Bien que je sois personnellement un fan des collections Apache, ils ne supportent pas vraiment les génériques, donc un multimap Google peut être plus sûr.

Questions connexes