2009-06-27 6 views
3

Ist es möglich, mehrere Werte für einen einzelnen Schlüssel in der Java-Dictionary-Klasse zu haben?Dictionary-Klasse

+0

Siehe meine Antwort unten in Bezug auf Wörterbuch - es gilt als eine veraltete Klasse. – Uri

+0

Welcher Java Dictionary Klasse? Meinst du Hashtable? –

+0

Das sieht wie eine Wiederholung dieser Frage aus: http://stackoverflow.com/questions/1049833/multi-evalued-hashtable-in-java, etwa 12 Stunden zuvor gepostet. Beide wurden von jemandem namens Raji gefragt, aber mit verschiedenen nicht registrierten Accounts. – Jonik

Antwort

2

Sicher. Verwenden Sie eine Liste als Wert.

2

Sie eine regelmäßige Map verwenden können und die Werte Collection s sein:

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"); 

Oder Sie können MultiMap von der Apache Commons Collections verwenden .

Ein MultiMap ist ein Map mit etwas unterschiedlicher Semantik. Wenn Sie einen Wert in die Karte einfügen, wird der Wert zu diesem Collection hinzugefügt. Wenn Sie einen Wert erhalten, erhalten Sie eine Collection, die alle an diesen Schlüssel angelegten Werte enthält.

Zum Beispiel:

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

coll wird eine Sammlung sein, mit "A", "B", "C".

(Leider MultiMap keine Generika verwenden.)

+0

Sie können den Typ "int" nicht als generischen Parameter verwenden, da es sich um einen primitiven Typ handelt. Verwenden Sie stattdessen Ganzzahl. – cd1

+0

+1 für die Beispielcodes. – akarnokd

+1

Google Sammlungen wäre Apache Commons Collections vorzuziehen. Es ist mit Generika und anderen Java 5-Funktionen implementiert und insgesamt scheint es eine bessere Erweiterung für Java Collections Framework zu sein. Siehe http://www.javalobby.org/articles/google-collections/ (Suche nach "Apache Commons") – Jonik

3

Zuerst Wörterbuch Klasse in Bezug auf: Diese Klasse wird obselete betrachtet, empfiehlt die Dokumentation Karte stattdessen verwenden.

Diese Art von Sammlung, die Sie suchen, wird als Multimap bezeichnet. Sie könnten eine selbst mit einer Liste implementieren, aber das ist mühsam.

Sie können eine MultiMap entweder aus Apache Collections oder aus den Google Collections verwenden. Während ich persönlich ein Fan der Apache-Sammlungen bin, unterstützen sie nicht wirklich Generika, also könnte ein Google-Multimap eher sicherer sein.