Wenn wir Collections.unmodifiableCollection(list)
verwenden, gibt dies eine Kopie der Sammlung zurück oder ist es schneller als eine Kopie zu erstellen? Wir könnten other.addAll(list)
machen, aber wir haben eine Liste von 600.000 Objekten, also ist addAll
nicht so gut.
Der Anrufer benötigt nur eine schreibgeschützte Sammlung.
Collections.unmodifiableList
gibt nur einen nicht änderbaren Wrapper zurück; Es kopiert nicht den Inhalt der Eingabeliste.
Es ist Javadoc sagt dies ziemlich deutlich:
Gibt eine nicht änderbare Ansicht der angegebenen Liste zurück. Mit dieser Methode können Module Benutzern einen schreibgeschützten Zugriff auf interne Listen ermöglichen. Abfragen von Operationen in der zurückgegebenen Liste "read-through" in die angegebene Liste und Versuche, die zurückgegebene Liste zu ändern, egal ob direkt oder über ihren Iterator, führen zu
UnsupportedOperationException
.
Wie von Matt Ball erwähnt, wenn Sie nicht möchten, dass das interne List
änderbar ist, möchten Sie vielleicht nur ein Guava
Kopiert
Collections.unmodifiableCollection(list)
die Sammlung?
Die anderen Antworten sind korrekt ( +1
s ringsum): Die Antwort lautet no.
Anstelle von Collections.unmodifiableList()
können Sie Guava ImmutableList.copyOf()
, um eine unveränderbare (nicht veränderbare) Listenkopie zu erstellen .
Collections.unmodifiableCollection(..)
umschließt einfach die ursprüngliche Sammlung und deaktiviert Methoden für die Änderung. Es kopiert es nicht.
Wenn Sie die ursprüngliche Liste ändern, ändert sich auch die "nicht änderbare" Sammlung. Aber der Kunde, der nur die nicht änderbare Sammlung hat, kann es nicht ändern.
Tags und Links java collections