Unveränderliche ArrayList in Java
1. Überblick
Dieses kurze Tutorial zeigthow to make an ArrayList immutable mit dem Kern-JDK, mit Guava und schließlich mit Apache Commons Collections 4.
Dieser Artikel ist Teil vonthe “Java – Back to Basic” series hier am Beispiel.
Weitere Lektüre:
Sammeln Sie einen Java-Stream in eine unveränderliche Sammlung
Erfahren Sie, wie Sie Java-Streams in unveränderlichen Sammlungen sammeln.
Einführung in Immutables
Ein schneller und praktischer Einstieg in die Immutables-Bibliothek - zum Generieren unveränderlicher Objekte mithilfe von Anmerkungen.
Java - Zufälliges Element aus einer Liste holen
Eine schnelle und praktische Anleitung zum Auswählen eines oder mehrerer zufälliger Elemente aus einer Liste in Java.
2. Mit dem JDK
Erstens bietet das JDK eine gute Möglichkeit, eine nicht modifizierbare Sammlung aus einer vorhandenen zu entfernen:
Collections.unmodifiableList(list);
Die neue Kollektion sollte zu diesem Zeitpunkt nicht mehr modifizierbar sein:
@Test(expected = UnsupportedOperationException.class)
public void givenUsingTheJdk_whenUnmodifiableListIsCreated_thenNotModifiable() {
List list = new ArrayList(Arrays.asList("one", "two", "three"));
List unmodifiableList = Collections.unmodifiableList(list);
unmodifiableList.add("four");
}
3. Mit Guave
Guava bietet ähnliche Funktionen zum Erstellen einer eigenen Version vonImmutableList:
ImmutableList.copyOf(list);
Ebenso sollte die resultierende Liste nicht modifizierbar sein:
@Test(expected = UnsupportedOperationException.class)
public void givenUsingGuava_whenUnmodifiableListIsCreated_thenNotModifiable() {
List list = new ArrayList(Arrays.asList("one", "two", "three"));
List unmodifiableList = ImmutableList.copyOf(list);
unmodifiableList.add("four");
}
Beachten Sie, dass diese Operation tatsächlichcreate a copy of the original list ist, nicht nur eine Ansicht.
Guava bietet auch einen Builder - dies gibt die stark typisiertenImmutableList anstelle von einfachList zurück:
@Test(expected = UnsupportedOperationException.class)
public void givenUsingGuavaBuilder_whenUnmodifiableListIsCreated_thenNoLongerModifiable() {
List list = new ArrayList(Arrays.asList("one", "two", "three"));
ImmutableList unmodifiableList = ImmutableList.builder().addAll(list).build();
unmodifiableList.add("four");
}
4. Mit den Apache Collections Commons
Schließlich bietet Commons Collection auch eine API zum Erstellen einer nicht modifizierbaren Liste:
ListUtils.unmodifiableList(list);
Und wieder sollte das Ändern der resultierenden Liste zu einemUnsupportedOperationException führen:
@Test(expected = UnsupportedOperationException.class)
public void givenUsingCommonsCollections_whenUnmodifiableListIsCreated_thenNotModifiable() {
List list = new ArrayList(Arrays.asList("one", "two", "three"));
List unmodifiableList = ListUtils.unmodifiableList(list);
unmodifiableList.add("four");
}
5. Fazit
Dieses Tutorial zeigt, wie Siecreate an unmodifiable List out of an existing ArrayList einfach mit den Kernsammlungen JDK, Google Guava oder Apache Commons verwenden können.
Die Implementierung all dieser Beispiele und Codefragmentecan be found over on Github - dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein, wie es ist.