# gesucht: Map nur mit doppelten Keys



## der-doktor (19. Aug 2010)

Hi!
Ich suche irgendeine Datenstruktur die eigentlich genauso funktioniert wie eine HashMap nur mit dem unterschied dass doppelte Keys möglich sind. Warum das in einer Map nicht geht ist mir auch völlig klar. 

Ich hab etwas in der Java Api gesucht und ich habe jetzt auf Anhieb keine Klasse gefunden die mir das ermöglicht.

Grundsätzlcih könnte man einen 2 dinemsionalen Array machen. z.b.: Object[][]
aber hier ist blöd dass Arrays nicht dynamisch erweiterbar sind und keine Generics möglich sind.

Alternativ könnte ich mir auch soetwas vorstellen List<KeyValuePair<K,V>>
aber in Java gibt es von Haus aus nirgendwo eine KeyValuePair implementation (Oder habe ich nur nicht richitg gesucht?)

Natürlich könnte ich das alles selbst programmieren, aber ich kann mir nicht vorstellen dass es so einen Datentyp noch nciht gibt.

Hat jemand eine Idee?


----------



## faetzminator (19. Aug 2010)

Zwei Keys, eine Value? Nur zwei Keys? Was willst du damit machen, was soll es abbilden?


----------



## der-doktor (19. Aug 2010)

abgebildet werden soll z.b.:

"1" > "a"
"2" > "b"
"2" > "b"
"2" > "c"
"3" > "d"

und operationen z.b.
void put(K,V)
List<K> getKeys();
List<V> getValues()
KeyValuePair<K,V> get(int index)


----------



## Gast2 (19. Aug 2010)

Ich würds vllt mal mit ner Map<K, List<V>> probieren.


----------



## XHelp (19. Aug 2010)

Also get(int index) macht in einer Map kein Sinn. Du könntest dir überlegen etwas in der Art zu machen: Map<K, List<V>>... dann speicherst du nicht nur einen Wert, sondern eine Liste von Werten zu einem key.


----------



## eRaaaa (19. Aug 2010)

Und dann würden sich evtl die Google Collections anbieten--> Multimap
google-collections - Project Hosting on Google Code

Erlaubt zu einem Schlüssel mehrere Values!


----------



## der-doktor (19. Aug 2010)

EikeB hat gesagt.:


> Ich würds vllt mal mit ner Map<K, List<V>> probieren.


Bei diesem Ansatz müsste ich mich wieder selbst um das hinzufügen der Einträge kümmern. Außerdem kann ich dan nicht ohne weiteres über die Values iterieren



XHelp hat gesagt.:


> Also get(int index) macht in einer Map kein Sinn. Du könntest dir überlegen etwas in der Art zu machen: Map<K, List<V>>... dann speicherst du nicht nur einen Wert, sondern eine Liste von Werten zu einem key.


vielleicht ist get(int index) wirklcih quatsch, aber was ich eigenlich bräuchte wäre dass ich über dei ganze Map iterieren kann und in jedem Iterationsschritt sowohl Key als auch Value zur verfügung habe



eRaaaa hat gesagt.:


> Und dann würden sich evtl die Google Collections anbieten--> Multimap
> google-collections - Project Hosting on Google Code
> 
> Erlaubt zu einem Schlüssel mehrere Values!


GENAU!!!!! sowas suche ich. Aber es scheint als wäre es wirklcih im Standart javase noch nicht enthalten.


----------



## Gast2 (19. Aug 2010)

der-doktor hat gesagt.:


> GENAU!!!!! sowas suche ich. Aber es scheint als wäre es wirklcih im Standart javase noch nicht enthalten.



Nüchtern betrachtet ist aber eigentlich das gleiche wie Map<K, List<V>>.


----------



## der-doktor (19. Aug 2010)

fassy hat gesagt.:


> Nüchtern betrachtet ist aber eigentlich das gleiche wie Map<K, List<V>>.



das ist mir schon klar, nur mit dem unterscheid (wie ich auch oben schon beschrieben habe), dass ich mich da um alles selbst kümmern müsste.

Meine ursprüngliche Frage war ja eigentlich auch ob nicht standartmäßig so eine Datenstruktur existiert Dass man mit dem entsprechenden Zeitaufwand alles selbst machen könnte will ich hier gar nicht abstreiten.


----------



## faetzminator (19. Aug 2010)

Einen eigenen Iterator schreiben und... tadaaa!


----------



## bygones (20. Aug 2010)

fassy hat gesagt.:


> Nüchtern betrachtet ist aber eigentlich das gleiche wie Map<K, List<V>>.


nuechtern betrachtet ist ne ArrayList auch nur n Array, dennoch nutzt man diese lieber.....


----------

