ConcurrentModificationException in nicht änderbarer Sammlung

8

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.

    
Pedro Estevao 01.11.2013, 11:59
quelle

2 Antworten

13

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%     
Pavel Horal 01.11.2013, 12:06
quelle
5

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 .

    
Marko Topolnik 01.11.2013 12:09
quelle