Kopiert Collections.unmodiableCollection (list) die Sammlung?

7
%Vor%

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.

    
Colin 29.07.2011, 18:40
quelle

3 Antworten

11

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 ImmutableList intern ... Sie können das sicher Anrufern direkt geben, da es sich nie ändern kann.

    
ColinD 29.07.2011 18:42
quelle
8
  

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 .

    
Matt Ball 29.07.2011 18:44
quelle
6

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.

    
Bozho 29.07.2011 18:43
quelle

Tags und Links