Karte von Maps-Daten-Struktur
Den MultiValueMap Klasse (Apache commons collections) erleichtert die Arbeit mit einer Karte, deren Werte sind Sammlungen. Ich bin auf der Suche nach einer Klasse, die macht es einfach zu arbeiten mit einer Map, deren Schlüssel werden Objekte und Werte sind Karten.
Ich bin mit Java 1.4, so kann Google nicht nutzen, Sammlungen oder Generika.
- Welche Seite brauchst du eine Karte? Sind Sie auf Zuordnung von anzeigen zu Objekt, Objekt zu Karte, oder eine Karte zu Karte?
- Könnt Ihr nicht einfach machen von Map<Etwas, Karte>? Oder Sie wollen in der Lage sein, etwas zu tun, wie die Karte.put(key1, key2, Wert)?
- Nicht, dass das allzu relevant ist, nehme ich an, aber ich bin neugierig: Welche Firma/Branche (so spezifisch wie Sie bequem sind, erzählen uns) noch benötigt Java 1.4? Auch Java 5 wurde die end-of-lifed. Java 1.4 wurde EOLd seit fast 2 Jahren bereits.
- Java-1.4 nicht-Generika (zumindest nicht in der standard-Distribution; ich verstehe, es war ein JSR von einer Art, die verwendet wurde, um zu testen, Generika, bevor Sie wurden Teil der Spezifikation, die in Java 5).
- Gay ich weiß, mindestens ein pharmazeutisches Unternehmen, das noch auf Java 1.4.
- Generika sind nicht erforderlich, um eine "Karte-der-Karten" datastructure. Muss nur mehr hässlich casting...
- Ich weiß, aber @Dave ' s Kommentar speziell nutzt generics-syntax.
- ein sehr großes Unternehmen, das software für die Reiseindustrie
- Es ist implizit von Ihr verlangen, dass der innere map-Taste sollte die gleiche wie die äußere Taste map, in dem Fall ist das überflüssig.
- Ich kann nicht sagen, ich bin überrascht von der pharma-Unternehmen—traurig, aber nicht überrascht. Ich bin überrascht von der travel-software, wenn. Ich hätte das so nicht erwartet.
- In unserem Projekt habe ich verwendet, Guave ' s com.google.common.sammeln.Table, die passt perfekt und hat jede Menge helper Methoden, die mich gerettet, Tonnen von code-Zeilen, z.B.: iteration über Karte... Es ist schade, dass man nicht mit Guave. (vielleicht Blick auf den Quellcode für die inspiration Finden: Guave collection-Typen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anzeigen von Karten ist eigentlich ein Baum-Struktur ohne single-root-Knoten (sowie anzeigen von Karten von Karten...).
Kann man sich Composite-Muster, ist weit verbreitet für die Umsetzung von Baum-Strukturen (wenn Ihre Komponenten hat den gleichen Typ, das ist nicht der Fall, wie ich finde).
Andere Lösung implementieren Sie eine einfache domain-Modell. Es werden viel klarer zu Lesen und leicht zu pflegen so etwas wie:
als
Den regulären Anzeigen Sammlung Werke für diese:
In der Tat, wenn Sie nicht besorgt über die Art der Sicherheit, Sie können setzen, was Sie wollen in den Wert Abschnitt:
mapOfMaps
werden, z.B. wenn dabeimapOfMaps.get("firstKey").put("secondKey",value)
. Zum Beispiel, Python-Karten haben einensetdefault
- Methode für diesen Zweck.Wenn du hast eine
map:{string,map:{string,thing}}
(absichtlich nicht Verwendung von Java-syntax zu vermeiden, die ganze Java1.4/Java5-Geschäft), dann sollten Sie sich auch überlegen, ob Sie stattdessen Modell, das alsmap:{tuple:{string,string},thing}
. Wenn multi-level-lookups Dominieren, dann ist das eine gute änderung zu machen (vorausgesetzt, Sie implementieren eine gutetuple
dass nichtequals()
richtig undhashCode()
intelligent), aber wenn Sie tun eine Menge von Einfügungen und Löschungen, dann ist es weniger gut.Intelligenz in hashCode bedeutet wohl nur kommen mit einer angemessenen Art und Weise zu mischen, die bits von den hashCodes der Inhalte zusammen. Wenn das Mitglied Werte erwartet werden, die aus nicht zusammenhängenden Sätzen (z.B., Namen und Berufe), dann kann man nur XOR Ihnen zusammen – nicht perfekt, aber Billig und schnell – aber wenn Sie haben weniger Kontrolle/Sicherheit, dann müssen Sie etwas anderes tun (z.B., drehen Sie den bits des einen der Werte vor dem XOR).