Ich habe diesen Code unten und erhalte eine ConcurrentModificationException, indem ich die folgende Zeile ausfühle:
%Vor%der Code:
%Vor%Der Stapel ist:
%Vor%Genau auf jeder Linie:
%Vor%Ich sehe nicht, warum dieser Fehler auftritt, weil ich die Liste nicht modifiziere.
Beachten Sie, dass Collections.unmodifiable*
nicht Sammlungsdaten kopiert, sondern nur die ursprüngliche Sammlung in einen speziellen Wrapper einpackt. Wenn Sie also die ursprüngliche Sammlung ändern, können Sie diesen Fehler erhalten.
Wenn Sie eine wirklich unabhängige nicht änderbare Sammlungsinstanz erstellen möchten:
%Vor% Sie müssen map
in einem anderen Thread aktualisieren, während Sie durch col
iterieren. Sowohl map#values
als auch Collections.unmodifiableCollection
geben Sichten auf vorhandene Datenstrukturen zurück. Was Sie also überlesen (und dies wird von Ihrem StackTrace bezeugt), ist der Eintragssatz Ihrer map
.
Tags und Links java collections concurrentmodification unmodifiable