Wenn wir eine Liste aus einem Array mit java.util.Arrays.asList()
erstellen, ist die Liste unveränderlich. Ich bin nur neugierig zu wissen, warum wir eine unveränderliche Liste erstellen möchten, wenn der grundlegende Zweck von List
(oder Set
oder Map
) dynamische Größe haben und Elemente nach Belieben hinzufügen, entfernen können. Wenn wir eine Datenstruktur mit fester Größe benötigen, gehen wir nach Array, und wenn wir eine dynamische Datenstruktur brauchen, gehen wir nach List
oder Set
oder Map
usw. Also, was ist der Zweck einer unveränderlichen Liste? Ich bin bei der Arbeit an meinem Auftrag auf dieses Problem gestoßen.
Wenn wir mit java.util.Arrays.asList () eine Liste aus einem Array erstellen, ist die Liste änderbar.
Ja und nein: Die Liste kann geändert werden, indem
aufgerufen wird %Vor%Aber die Liste darf nicht strukturell geändert werden. Das bedeutet, dass es nicht möglich ist, Elemente zur Liste hinzuzufügen oder Elemente aus der Liste zu entfernen. Der Grund ist einfach, dass die Liste immer noch vom Array unterstützt wird und die Größe des Arrays sich nicht ändern kann.
Wenn wir eine veränderbare Sammlung fester Größe benötigen, gehen wir zu Array
Und das ist der entscheidende Punkt hier: Ein Array ist nicht a Sammlung . Die Methode Arrays.asList
dient hauptsächlich als "Brücke" zwischen der "arrays world" und der "Collections World".
Mit der Methode Arrays.asList
können Sie beispielsweise Daten an eine Methode übergeben, die ein Collection
erwartet:
Dieser Anwendungsfall umfasst das Erstellen anderer Sammlungen aus einem Array. Wenn Sie beispielsweise ein Array haben und ein Set
mit den Elementen aus dem Array erstellen möchten, könnten Sie
Aber mit der Methode Arrays.asList
kann dies bequemer durchgeführt werden:
Die Methode Arrays.asList
ist sozusagen das Gegenstück zu Collection # toArray -Methode, die in die entgegengesetzte Richtung funktioniert (obwohl diese Methode normalerweise das Erstellen und Füllen eines neuen Arrays beinhaltet, während die Arrays.asList
-Methode nur" Wraps "enthält ein Array und lässt es wie " List
" aussehen.
Dies liegt an add()
in der Klasse AbstractList , erweitert um die angepasste ArrayList (innere statische Klasse) unter der Array-Java-Klasse (die intern verwendet wird). Bitte beachten Sie, dass diese add () - Methode nicht in java.util.ArrayList definiert ist, sondern die von java.util.Arrays$ArrayList
.
Ein Array hat die Eigenschaft, eine feste Größe zu haben, die nativ von jvm bereitgestellt wird. Auch wenn, Arrays.copyOf () mit größerer Größe wie Arrays.copyOf(arr, 10); //10 is the length
verwendet wird, wobei das ursprüngliche Array arr= int[]{1,2} // size is two
ist. Es erstellt immer ein neues Array mit System.arraycopy()
, das schließlich eine native Methode aufruft.
[statische void arraycopy (Objekt src, int srcPos, Objekt dest, int destPos, int Länge)]
Bitte beachten Sie, dass die obige Liste nur Größenbeschränkungen enthält. Wenn Sie eine änderbare Liste wirklich ändern möchten, verwenden Sie bitte Collections.unmodifiableList(mutableList);
.
Immutablility ist kein definiertes Konzept, sondern ein Entwicklergedanke. Bitte beachten Sie Ссылка und Ссылка
Tags und Links java arrays list collections immutablelist