在Java中的foreach循环中调用remove
在Java中,使用foreach循环遍历集合时,对集合调用remove是合法的吗?例如:
List<String> names = ....for (String name : names) {
// Do something
names.remove(name).
}
作为附录,删除尚未迭代的项是否合法?例如,
//Assume that the names list as duplicate entriesList<String> names = ....
for (String name : names) {
// Do something
while (names.remove(name));
}
回答:
为了在迭代集合时安全地从集合中删除,你应该使用迭代器。
例如:
List<String> names = ....Iterator<String> i = names.iterator();
while (i.hasNext()) {
String s = i.next(); // must be called before you can call i.remove()
// Do something
i.remove();
}
从Java文档:
此类的迭代器和listIterator
方法返回的迭代器是快速失败的:如果在创建迭代器之后的任何时间以任何方式对列表进行结构修改,则除了通过迭代器自己的remove或add方法之外,迭代器都会抛出ConcurrentModificationException
。因此,面对并发修改,迭代器会快速干净地失败,而不会在未来的不确定时间内冒任意,不确定的行为的风险。
对于许多新手来说,也许不清楚的是,使用for / foreach构造对列表进行迭代会隐式创建一个迭代器,该迭代器必然无法访问。该信息可以在这里找到
以上是 在Java中的foreach循环中调用remove 的全部内容, 来源链接: utcz.com/qa/425468.html