Java – using iterator and iterator Concurrentmodificationexception at remove()
•
Java
private int checkLevel(String bigWord,Collection<String> dict,MinMax minMax)
private int checkLevel(String bigWord,Collection<String> dict,MinMax minMax) { /*value initialised to losing*/ int value = 0; if (minMax == MinMax.MIN) value = 1; else value = -1; boolean go = true; Iterator<String> iter = dict.iterator(); while(iter.hasNext()) { String str = iter.next(); Collection<Integer> inds = naiveStringSearch(bigWord,str); if(inds.isEmpty()) { iter.remove(); } for (Integer i : inds) { MinMax passin = minMax.MIN; if (minMax == MinMax.MIN) passin = minMax.MAX; int value2 = checkLevel(removeWord(bigWord,str,i),dict,passin); if (value2 == -1 && minMax == minMax.MIN) { value = -1; go = false; } if (value2 == 1 && minMax == minMax.MAX) { value = 1; go = false; } } if (go == false) break; } return value; }
Error:
Exception in thread "main" java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:810) at java.util.HashMap$KeyIterator.next(HashMap.java:845) at aStringGame.Main.checkLevel(Main.java:67) at aStringGame.Main.test(Main.java:117) at aStringGame.Main.main(Main.java:137)
What's the problem?
Solution
The dictionary is being revised somewhere I suspect it may happen on this call:
int value2 = checkLevel(removeWord(bigWord,passin); ^^^^
Editing basically, what happens is that the recursive call to checklevel () modifies dict through another iterator. This makes it possible for the rapid failure behavior of the external iterator
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码