Java中的迭代、并发修改异常

发布于 2024-09-10 14:12:46 字数 134 浏览 2 评论 0原文

我在 ArrayList 上使用增强的 for 循环,并希望删除一些包含特定值的元素。

当我尝试这样做时,我得到了上述异常。我环顾四周,似乎在修改集合时使用增强的 for 循环是一个坏主意。我还能怎么做呢?

感谢您的帮助。

I'm using a enhanced for loop over an ArrayList and wanted to remove some elements that contain a particular value.

When I try to do this I get the above exception. I've had a look around and it seems using a enhanced for loop while modifying the collection is a bad idea. How else would I go about this?

thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

白云悠悠 2024-09-17 14:12:46

您可以保留要删除的项目的列表,然后在循环完成后调用removeAll。

Vector toRemove=new Vector();
for (Object o: array){
  if(remove(o))  toRemove.add(o);
}
array.removeAll(o);

You can keep a list of the items to be removed, then call removeAll after the loop has finished.

Vector toRemove=new Vector();
for (Object o: array){
  if(remove(o))  toRemove.add(o);
}
array.removeAll(o);
何处潇湘 2024-09-17 14:12:46

您应该获取集合的迭代器,遍历它并在想要删除元素时调用迭代器上的remove() 方法。请注意,并非所有迭代器实现都支持remove(),它是一个可选方法!

for(Iterator it = collection.iterator(); it.hasNext();) {
  Object element = it.next();
  if(.. should remove element ..)
    it.remove()
}

You should get an Iterator for the collection, walk that and call the remove() method on the iterator when you want to remove an element. Please be advised that not all Iterator implementations support remove(), it's an optional method!

for(Iterator it = collection.iterator(); it.hasNext();) {
  Object element = it.next();
  if(.. should remove element ..)
    it.remove()
}
琉璃繁缕 2024-09-17 14:12:46

您无法使用增强的 for 循环来执行此操作,因为您无权访问 迭代器 正在使用。您需要使用常规 for 循环并通过 Iterator.remove()

You cannot use the enhanced for loop to do this as you do not have access to the Iterator being used. You need to use a regular for loop and remove elements of the ArrayList via Iterator.remove().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文