Bei der Entwicklung von neuen Frameworks hat der Entwickler den Vorteil, dass keine Rückwärtskompatiblität beachtet werden muss. Dies haben sich die beiden Hauptentwickler der Google Collections, Kevin Bourrillion und Jared Levy, zu Nutze gemacht und die Bibliothek konsequent auf Java 5, im besonderen Generics, ausgerichtet. Sie haben sich zu einer Eigenentwicklung entschieden, da u. a Apache Commons Collections bereits vor der Generics-Ära entstanden ist. Eine ausführlichere Begründung ist der Projekt-FAQ und in einem Interview mit den beiden Entwicklern zu entnehmen.
Erste Berührung
Die Bibliothek (Lizenz: Apache License 2.0) steht als ZIP-Archiv (Größe: 1,5 MB) zum Download bereit. Neben der Bibliothek (google-collect-1.0.jar) selbst sind die Quellen und die API-Dokumentation (auch online verfügbar) im Archiv enthalten.
Bereits bei der ersten Verwendung fällt positiv auf, dass die Bibliothek keine weiteren Abhängigkeiten zu anderen Bibliothek (außer natürlich dem JDK) besitzt. Somit ist bei einem Einsatz wirklich dem Projekt nur eine JAR-Datei hinzuzufügen.
Erkundungstour
Für einen groben Überblick über die angebotenen Funktionalitäten bietet sich folgende Einteilung an:
- BiMap
- Forwarding Collections
- Immutable Collections
- MapMaker
- Multimap und Multiset
Unter BiMap werden Maps zusammengefasst, die über die Methode inverse eine umgekehrte Sicht auf die Map anbieten. Aus den Werten werden die Schlüssel und aus den Schlüsseln die Werte. Nachfolgendes Beispiel zeigt die Verwendung der HashBiMap. Intern werden die Werte in zwei HashMaps gespeichert.
import com.google.common.collect.HashBiMap;public class BiMapTest {public static void main(String[] args) {//Aufbau der DatenstrukturHashBiMap<String, String> bimap = HashBiMap.create();bimap.put("key 1", "value 1");bimap.put("key 2", "value 2");bimap.put("key 3", "value 3");//Ausgabe: value 1System.out.println(bimap.get("key 1"));//Ausgabe: key 1System.out.println(bimap.inverse().get("value 1"));}}
Die Forwarding Collections basieren auf dem Dekorator-Pattern und leiten alle Methodenaufrufe an einen Delegate weiter. Damit kann das Verhalten einer Collection-Klasse angepasst werden, ohne dass der Entwickler eine Ableitung einer Collection-Klasse erzeugen muss. Alle Klassen, die ForwardCollection implementieren, sind als abstrakte Klassen implementiert. Um eine solche zu erzeugen, wird die Implementierung der Methode delegate benötigt.
Über die JDK-Klasse Collections können mittels statischer Methoden unveränderbare Collections erzeugt werden, z. B. mit der Methode unmodifableSet. Über einen Satz von Klassen der Google Collections Library geht dies bequemer von der Hand. Diese Klassen haben als Basis die abstrakte Klasse ImmutableCollection. Die Erzeugung kann mit einem einzigen Aufruf erfolgen, wie das nachfolgende Beispiel es anhand eines ImmutableSet zeigt.
ImmutableSet<Integer> set = ImmutableSet.of(1, 2, 3, 4, 5 ,6, 7);//Ausgabe: 7System.out.println(set.size());//Exception: UnsupportedOperationExceptionset.add(7);















