当前位置: 首页 > 面试题库 >

如何在迭代集合时安全地从集合中删除其他元素

顾文昌
2023-03-14
问题内容

我正在对JRE Collection进行迭代,该JRE
强制执行快速失败迭代器概念,因此ConcurrentModificationException如果Collection在迭代时修改了,则会抛出a
,而不是使用Iterator.remove()method。但是,如果对象满足条件,则需要删除该对象的“逻辑伙伴”。从而阻止伙伴也被处理。我怎样才能做到这一点?也许为此使用更好的收集类型?

例。

myCollection<BusinessObject>

for (BusinessObject anObject : myCollection) 
{ 
  if (someConditionIsTrue) 
  { 
    myCollection.remove(anObjectsPartner); // throws ConcurrentModificationException 
  }
}

谢谢。


问题答案:

您要从列表中删除项目,然后继续在同一列表中进行迭代。您是否可以实施两步解决方案,即在步骤1中将要删除的项目收集到临时集合中,而在步骤2中识别出它们后将它们删除?



 类似资料:
  • AFAIK,有两种方法: 迭代集合的副本 使用实际集合的迭代器 例如, 而且 有没有理由偏爱一种方法而不是另一种方法(例如,由于可读性的简单原因而偏爱第一种方法)?

  • 问题内容: AFAIK有两种方法: 遍历集合的副本 使用实际集合的迭代器 例如, 和 是否有任何理由偏爱一种方法(例如,出于可读性的简单原因而偏爱第一种方法)? 问题答案: 让我举几个例子,并提出一些避免方案。 假设我们有以下藏书 收集并删除 第一种技术是收集所有要删除的对象(例如,使用增强的for循环),并在完成迭代后删除所有找到的对象。 假设你要执行的操作是“删除”。 如果要“添加”此方法也可

  • 问题内容: 我希望能够在迭代过程中从集合中删除多个元素。最初,我希望迭代器足够聪明,以使下面的幼稚解决方案能够正常工作。 但这会引发一个错误。 请注意,就我所知,iterator.remove()无法正常工作,因为我需要一次删除多个内容。还假设不可能确定“即时”删除哪些元素,但是可以编写该方法。在我的特定情况下,要确定要在迭代过程中删除的内容,将占用大量内存和处理时间。由于内存限制,也无法制作副本

  • 问题内容: 最近,我编写此代码时并没有考虑太多: 其中,将删除该项目。 现在看一下代码,我对为什么它甚至起作用感到困惑-我是否不应该得到类似的例外?当使用常规的for-in循环时,甚至可以使用相同的代码! 这是预期的行为吗?还是我很幸运,它没有崩溃? 问题答案: 这确实是预期的行为–这是由于Swift(以及标准库中的许多其他集合)是一种具有写时复制语义的值类型的事实。这意味着其基础缓冲区(间接存储

  • 我已经在这上面耽搁了一段时间了。我正在尝试删除一个集合的元素,如果他们制定了一个集合的标准。然而,在迭代时,当我试图移除元素时,它失败了。 我得到java.util.concurrentModificationException 如有任何建议,将不胜感激。

  • 问题内容: 当 Person 对象包含使用 @ElementCollection 存储的数据时,我在解决如何使用JPA 批量删除 Person 对象方面遇到麻烦。任何有关如何执行此操作的想法将不胜感激。 我现在正在做的是,它因外键约束错误而失败: 引起原因:java.sql.SQLException:违反完整性约束:外键无动作;FKCEC6E942485388AB表:PERSON_EMAIL 如果