2016-05-25 16 views
0

Das nervt mich wirklich (und meine Kollegin).Warum ist Multimap nicht mit Kamelen verpackt?

Es ist nicht

  • HashMap
  • Treemap
  • org.apache.commons.collections.Multimap
  • usw.

Also, warum jemand diese Namenskonvention gar nicht bemerkt Fehler oder gibt es eine Intention hinter diesem Tippfehler?

Antwort

4

Das Wort "multimap" (ein Wort, vollständig in Kleinbuchstaben) bezieht sich auf eine bestimmte Datenstruktur. Es unterscheidet sich von einer "Karte", die eine andere Datenstruktur ist. Da sie unterschiedliche Datenstrukturen sind, haben sie unterschiedliche Namen.

Die Map Schnittstelle, die Sie in der Regel in Java verwenden ist der gewählte Name für eine associative array, die auch als „Karte“, „Wörterbuch“, „Hash“ bekannt ist, usw. Ebenso Guava der Multimap Schnittstelle ist ihre Darstellung der multimap Datenstruktur .

+0

Das macht Sinn. Ich habe nie gedacht, dass dies eine Option ist, da Wortverbindungen für mich in der englischen Sprache immer selten vorkamen. – Torsten

6

Es ist kein Tippfehler. Guavas Multimap ist nicht ein Map, d. H. Es erstreckt sich nicht Map Schnittstelle (und es sollte nicht). Siehe Guava's wiki page on this topic:

  • Multimap.get(key) gibt immer eine nicht-null, möglicherweise leere Sammlung. Dies bedeutet nicht, dass die Multimap Speicher für den Schlüssel verwendet, sondern die zurückgegebene Sammlung ist eine Ansicht, mit der Sie Assoziationen mit dem Schlüssel hinzufügen können, wenn Sie möchten.
  • Wenn Sie das Map-ähnliche Verhalten des Zurückgebens null für Schlüssel bevorzugen, die sich nicht in der Multimap befinden, verwenden Sie die asMap() Ansicht, um eine zu erhalten. (Oder bekommt ein Map<K,List<V>> von einem ListMultimap verwenden the static Multimaps.asMap() method. Ähnlichen Methoden existieren für SetMultimap und SortedSetMultimap.)
  • Multimap.containsKey(key) wahr ist, wenn und nur wenn es irgendwelche Elemente mit dem angegebenen Schlüssel zugeordnet ist. Wenn ein Schlüssel k zuvor einem oder mehreren Werten zugeordnet wurde, die seither aus der Multimap entfernt wurden, gibt Multimap.containsKey(k) den Wert false zurück.
  • Multimap.entries() gibt alle Einträge für alle Schlüssel im Multimap zurück. Wenn Sie alle Key-Collection-Einträge möchten, verwenden Sie asMap().entrySet().
  • Multimap.size() gibt die Anzahl der Einträge in der gesamten Multimap zurück, nicht die Anzahl der einzelnen Schlüssel. Verwenden Sie stattdessen Multimap.keySet().size(), um die Anzahl der einzelnen Schlüssel zu ermitteln.

Auf der anderen Seite, Apache Commons Collections' MultiMap (nicht die Hauptstadt „M“ in der Karte) erstreckt Map, aber es ist ein wenig umständlich im Gebrauch sowie Apache Devs kam auch consludion dass erstreckt und imitiert Karte ähnlicher Verhalten in multimap ist nicht, was Nutzer will, so dass sie veraltet MultiMap (ja, sollten Sie verwenden alte MultiMap Schnittstelle und ihre Implementierungen in neuen Code nicht!) und empfehlen nun MultiValueMap statt mit - es spielt nichtMap verlängern und hat ziemlich ähnlich API zu Guava gleichwertig.

+0

Dies ist eine gute Erklärung über die Implementierung von Guava, aber beantwortet nicht wirklich die Frage, warum der Name so geschrieben wird wie er ist. – Torsten

+0

Au contraire, "Guavas' Multimap' ist keine 'Map'", genau wie der Multiplayer kein Spieler ist (und warum würdest du ihn mit "P" buchstabieren)? In Bezug auf Beispiel mit HashMap (und nicht Hashmap), wenn Sie Implementierungen für Guava Multimap sehen, folgen sie der Konvention und HashMultimap ist einer von ihnen (nicht Hashmultimap, wie Sie vielleicht argumentieren). – Xaerxess

+0

Multiplayer ist jedoch ein Adjektiv. MultiPlayer würde betonen, dass etwas ein Spieler ist, der multi ist (das macht natürlich keinen Sinn), da eine ArrayList zeigt, dass es eine Liste (Substantiv) ist, während multifunktional bedeutet, dass etwas in vielerlei Hinsicht funktional (Adjektiv) ist. – Torsten