Arrays.asList gegen neue ArrayList (Arrays.asList ())

1. Übersicht

In diesem kurzen Tutorial werden die Unterschiede zwischen Arrays.asList (Array) und ArrayList (Arrays.asList (Array)) untersucht.

2. Arrays.asList

Beginnen wir mit der Methode Arrays.asList .

Mit dieser Methode können wir von einem Array in ein List- Objekt fester Größe konvertieren . Diese Liste ist nur ein Wrapper, der das Array als Liste verfügbar macht. Es werden keine Daten kopiert oder erstellt .

Außerdem können wir die Länge nicht ändern, da das Hinzufügen oder Entfernen von Elementen nicht zulässig ist .

Wir können jedoch einzelne Elemente innerhalb des Arrays ändern. Beachten Sie, dass alle Änderungen, die wir an den einzelnen Elementen der Liste vornehmen, in unserem ursprünglichen Array wiedergegeben werden :

String[] stringArray = new String[] { "A", "B", "C", "D" }; List stringList = Arrays.asList(stringArray); 

Nun wollen wir sehen, was passiert, wenn wir das erste Element von stringList ändern :

stringList.set(0, "E"); assertThat(stringList).containsExactly("E", "B", "C", "D"); assertThat(stringArray).containsExactly("E", "B", "C", "D");

Wie wir sehen können, wurde auch unser ursprüngliches Array geändert. Sowohl die Liste als auch das Array enthalten jetzt genau dieselben Elemente in derselben Reihenfolge.

Versuchen wir nun, ein neues Element in stringList einzufügen :

stringList.add("F");
java.lang.UnsupportedOperationException at java.base/java.util.AbstractList.add(AbstractList.java:153) at java.base/java.util.AbstractList.add(AbstractList.java:111)

Wie wir sehen können, löst das Hinzufügen / Entfernen von Elementen zur / aus der Liste eine java.lang.UnsupportedOperationException aus .

3. ArrayList (Arrays.asList (Array))

Ähnlich wie bei der Arrays.asList- Methode können wir ArrayList (Arrays.asList (Array)) verwenden, wenn wir eine Liste aus einem Array erstellen müssen .

Im Gegensatz zu unserem vorherigen Beispiel handelt es sich hierbei jedoch um eine unabhängige Kopie des Arrays. Dies bedeutet, dass das Ändern der neuen Liste keine Auswirkungen auf das ursprüngliche Array hat . Darüber hinaus verfügen wir über alle Funktionen einer regulären ArrayList, z. B. das Hinzufügen und Entfernen von Elementen:

String[] stringArray = new String[] { "A", "B", "C", "D" }; List stringList = new ArrayList(Arrays.asList(stringArray)); 

Ändern wir nun das erste Element von stringList :

stringList.set(0, "E"); assertThat(stringList).containsExactly("E", "B", "C", "D");

Und jetzt wollen wir sehen, was mit unserem ursprünglichen Array passiert ist:

assertThat(stringArray).containsExactly("A", "B", "C", "D");

Wie wir sehen können, bleibt unser ursprüngliches Array unberührt .

Wenn wir uns vor dem Abschluss den JDK-Quellcode ansehen, sehen wir, dass die Arrays.asList- Methode einen ArrayList- Typ zurückgibt , der sich von java.util.ArrayList unterscheidet . Der Hauptunterschied besteht darin, dass die zurückgegebene ArrayList nur ein vorhandenes Array umschließt - die Methoden zum Hinzufügen und Entfernen werden nicht implementiert .

4. Fazit

In diesem kurzen Artikel haben wir uns die Unterschiede zwischen zwei Möglichkeiten zum Konvertieren eines Arrays in eine ArrayList angesehen . Wir haben gesehen, wie sich diese beiden Optionen verhalten und wie sie ihre internen Arrays implementieren.

Wie immer finden Sie die Codebeispiele auf GitHub.