Ich suchte nach einer bidirektionalen Kartenimplementierung in Java und stieß auf diese beiden Bibliotheken:
- Google Guava (früher "Google Collections")
- Apache Commons-Sammlungen
Beide sind kostenlos, haben die von mir gesuchte bidirektionale Kartenimplementierung (BidiMap in Apache, BiMap in Google), sind erstaunlich fast gleich groß (Apache 493 kB, Google 499 kB) [Hrsg.: Nicht mehr wahr!] Und scheinen in jeder Hinsicht ziemlich ähnlich zu mir.
Welches soll ich wählen und warum? Gibt es andere gleichwertige Alternativen (muss kostenlos sein und mindestens die bidirektionale Karte haben)? Ich arbeite mit der neuesten Java SE, daher muss ich mich nicht künstlich auf Java 5 oder ähnliches beschränken.
java
collections
apache-commons
guava
Joonas Pulakka
quelle
quelle
Antworten:
Meiner Meinung nach ist Guava (früher bekannt als Google-Sammlungen) die bessere Wahl :
CacheBuilder
und sein VorgängerMapMaker
sind einfach fantastischApache Commons Collections ist ebenfalls eine gute Bibliothek, hat jedoch lange Zeit keine generika-fähige Version bereitgestellt (was meiner Meinung nach ein großer Nachteil für eine Sammlungs-API ist) und scheint sich im Allgemeinen in einer Wartungs- / Nicht-Do-Funktion zu befinden -zu-viel-Arbeit-an-es-Modus In letzter Zeit hat Commons Collections wieder etwas Fahrt aufgenommen , aber es gibt Nachholbedarf. .
Wenn Downloadgröße / Speicherbedarf / Codegröße ein Problem darstellt, sind Apache Commons Collections möglicherweise ein besserer Kandidat, da dies eine häufige Abhängigkeit von anderen Bibliotheken ist. Daher kann die Verwendung in Ihrem eigenen Code möglicherweise auch ohne Hinzufügen zusätzlicher Abhängigkeiten erfolgen. Bearbeiten: Dieser besondere "Vorteil" wurde inzwischen teilweise untergraben, da viele neue Bibliotheken tatsächlich von Guava und nicht von Apache Commons-Sammlungen abhängen .
quelle
Aus der FAQ : Google Collections FAQ
quelle
Die wichtigsten Dinge, die ich gefunden habe, machen Google Collections zum Ausgangspunkt:
Hier ist ein großartiges Youtube-Video eines Vortrags, der vom Hauptautor gehalten wurde, und er diskutiert gut, was es wert ist, über diese Bibliothek informiert zu werden.
quelle
Zwei andere Dinge (ich hoffe ich liege nicht falsch)
quelle
git clone https://code.google.com/p/guava-libraries/
undgit checkout v11.0.2
?Eine böse Sache an Guava ist, dass Multimap java.util.Map nicht erweitert. Wenn Sie über eigene Methoden verfügen, die mit Maps funktionieren, funktionieren diese nicht mit Guava Multimaps (die Apache MultiMap-Oberfläche erweitert java.util.Map). Ich bin mir sicher, dass es einen guten Grund gibt, warum es so ist, aber es ist auch unpraktisch.
quelle
Multimap
like verwenden möchtenMap
, gibt es immerasMap()
Ansicht.Map
, mit dem Verständnis, dass jeder Verweis aufV
tatsächlich ein sein wirdCollection<V>
, werden Sie ziemlich schnell erkennen, warum es kein gutes Superinterface für istMultimap<K, V>
.