2010-03-03 11 views
5

Ist die Entscheidung von Google ähnlich der für SortedMultiSet(stackoverflow question) oder liegt es daran, dass MultiKeyMap nicht verwendet wird?Warum unterstützen Google Collections MultiKeyMap nicht wie Apache Collections?

Ich bin mir bewusst, dass eine Alternative für MultiKeyMap eine benutzerdefinierte Klasse als Schlüssel verwenden kann, die die mehreren Schlüssel als Klassenmitglieder enthält. Im Gegensatz dazu mag ich das Konzept der Angabe mehrerer Schlüssel beim Aufruf des Get MultiKeyMap.

Apache-Version von MultiKeyMap ist großartig, aber ich vermisse generics stark und daher in Google Collections für eine moderne Implementierung von es gesucht. Wenn jemand eine Idee hat, warum Google es noch nicht unterstützt hat oder es eine bessere Alternative dafür gibt, antworten Sie bitte.

Antwort

6

Wir haben eine sehr nette Implementierung einer zweistufigen Karte, die wir eine "Tabelle" nennen (K1 ist der "Zeilenschlüssel" und K2 ist der "Spaltenschlüssel"), und wir haben ihn einfach nicht bekommen veröffentlicht noch. Die letzten zwei Schlüssel sind jedoch rückläufige Erträge.

+2

great :) reagiert offiziellen Google-Sammlung Kerl haben Kann ich einen ersten Blick in diese 'Tisch' Datenstruktur haben? Und warum nicht eine 3-stufige und 4-stufige Karte? –

+0

@ Kevin-Bourrillion hat diese 2-stufige Karte schon veröffentlicht? – Cat

+0

ja, wie die am meisten uploged Antwort hier darauf hinweist. Meine Antwort sollte nicht angenommen werden. –

2

Ich denke Generika könnten der Showstopper für die Umsetzung hier sein. Wenn Sie nur die Map-Schnittstelle betrachten, gibt es generische Bezeichner für den Schlüsseltyp (K) und den Werttyp (V). Ich glaube nicht, dass es möglich wäre, es einfach unter Verwendung von Generika zu spezifizieren, ohne die Implementierungen in mehrere Klassen zu trennen (eine für jede Anzahl von Schlüsselkomponenten).

Sie würden eine Klasse für jeden Bedarf:

MultiKeyMap2<K1,K2,V> 
MultiKeyMap3<K1,K2,K3,V> 
MultiKeyMap4<K1,K2,K3,K4,V> 
MultiKeyMap5<K1,K2,K3,K4,K5,V> 

Die zugrunde liegende Implementierung ist im Grunde tun, was Sie vorschlagen (eine benutzerdefinierte Klasse verwenden). Es wird jedoch formal keine Klasse dafür erstellt, alles ist inline. Es ist wirklich ein Implementierungsdetail. Aber, um die Google-Sammlungen zu verwenden, würde eine benutzerdefinierte Klasse, um das gleiche zu tun, auf die gleiche Weise funktionieren, wie ich sicher bin, HashCode() und Equals() zu implementieren.

9

FYI, die angenommene Antwort wurde im März 2010 beantwortet, aber ab September 2010 enthalten Guava Table.

+0

können Sie die akzeptierte Antwort mit den aktualisierten Informationen bearbeiten, die Sie hier angegeben haben? –

+0

@MonisIqbal Das sollst du nicht tun. Hier ist [ein Beitrag unter vielen auf Meta zu diesem Thema] (http://meta.stackoverflow.com/a/320293/1768232). Wenn Ihnen die akzeptierte Antwort nicht gefällt, können Sie sie ablehnen. Wenn du meins magst, upvote es, dafür sind die Buttons da. Aber Sie sollten die Antwort eines anderen nicht vollständig bearbeiten, denn die Bearbeitungsfunktion ist für Verbesserungen, die den Inhalt nicht ändern. – durron597

Verwandte Themen