我不明白为什么会这样。我正在对其他问题进行一些研究,我发现在使用for循环时你无法修改集合。但是,我正在使用迭代器,为什么它不起作用?
int counter = 0;
int otherCounter = 0;
ArrayList<Character> chars = new ArrayList<Character>();
Iterator<Character> i = chars.iterator();
for (char s : e.getMessage().toCharArray()) {
chars.add(s);
}
while (i.hasNext()) {
char s = i.next();
if (chars.get(otherCounter + 1) == s) {
counter++;
} else {
counter = 0;
}
if (counter >= 2) {
i.remove();
}
otherCounter++;
}
由于某些原因,我在这一行收到错误: char s = i.next();
答案 0 :(得分:2)
创建迭代器后,您将添加到集合中 这引发了异常。
完成修改集合后,需要创建迭代器。
答案 1 :(得分:0)
这是因为&#34;增强了循环&#34;正如您使用它在幕后创建Iterator
。
事实上,当你写:
for (X x: whatever) {
// do something with x
}
真实&#34;生成的代码类似于:
Iterator<X> iterator = whatever.iterator();
while (iterator.hasNext()) {
X x = iterator.next();
// do something with x
}
如果whatever
实施Iterable<X>
(List
执行;事实上,任何Collection
都会执行)
在您的示例中,您创建了一个List<Character>
,在其上创建了第一个Iterator<Character>
,并且您的for循环在同一个列表中创建了另一个 Iterator<Character>
请注意,您在修改List
之前创建了第一个...因此结果。第一个Iterator
,仅在之后重复使用,将检测到同时,其基础列表已被修改:繁荣。