Java – do not modify the list, but still get concurrentmodificationexception
This is not a typical concurrent modificationexception problem until you look at another concurrent modificationexception problem
I understand concurrent modificationexceptions, but I don't understand why I get one in the following code In the following 'for', it seems that the iterator continues to exist outside the for loop (using the debugger in eclipse, I can see that the iterator retains the modcount value of its JList when restarting the loop.)
public class ForEachTest { public static void main(String[] args) { List<Integer> zList = new LinkedList<Integer>(); List<Integer> jList = new LinkedList<Integer>(); jList.add(1); while (true) { for (Integer j : jList) { zList.add(17); System.out.println(j); } jList = zList; } } }
At first I thought it might be a syntax sugar problem, but I rewritten it with an explicit iterator and ran the same behavior
Finally, I can rewrite for by dividing it into a period of time and performing a separate initialization step, so I don't just want it to be rewritten to make it work But I want to know what the problem here is If possible, I prefer to use the for - each syntax
Solution
Look at your cycle:
while (true) { for (Integer j : jList) { zList.add(17); System.out.println(j); } jList = zList; }
In the second iteration of the external loop, JList and zlist refer to the same list (because JList = zlist; statement)... So when you add zlist to the internal loop, you are modifying the list. You are an iteration Bang