当前位置: 首页 > 知识库问答 >
问题:

在迭代[duplicate]时从其自身删除一个集

蒋胡非
2023-03-14

我已经在这上面耽搁了一段时间了。我正在尝试删除一个集合的元素,如果他们制定了一个集合的标准。然而,在迭代时,当我试图移除元素时,它失败了。

我得到java.util.concurrentModificationException

private static void smallerSet(Set<Map<String, Int>> set){

    for (Map<String, Integer> map : set){

        for (String String : map.keySet()){

            if ( true){
                set.remove(map);

            }
            else{
                //System.out.println("test");


            }

        }
    }
}

如有任何建议,将不胜感激。

共有1个答案

顾淳
2023-03-14

在使用增强的for循环迭代集合时,不能从该集合中删除元素

您应该使用显式的迭代器并使用迭代器remove()方法删除:

Iterator<Map<String, Integer>> iter = set.iterator();
while (iter.hasNext ()) {
    Map<String, Integer> map = iter.next();
    for (String str : map.keySet()){
        if (some condition) {
            iter.remove();
            break; // you should probably break from the inner loop
                   // after removing an element
        } else {
            //System.out.println("test");
        }
    }
}
 类似资料:
  • 现在,这段代码运行良好,该项从p对象和jlist中都被删除,但它在it.next()行抛出一个“ConcurrentModificationException”异常。 我怎么解决这个?

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

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

  • 问题内容: 我已经打电话给其中包含。 迭代地图时,如果与指定的字符串匹配,则需要从地图中删除键。 即 包含,但我无法从中删除密钥。 而是得到错误: 问题答案: 尝试: 使用Java 1.8及更高版本,您只需一行即可完成上述操作:

  • 本文向大家介绍在Python中迭代时从字典中删除项目,包括了在Python中迭代时从字典中删除项目的使用技巧和注意事项,需要的朋友参考一下 python字典是无序,可变和索引的集合。它们具有键和值,并且使用键来引用每个项目。在本文中,我们将探讨从字典中删除项目的方法。 与键一起使用del 在这种方法中,我们捕获了需要删除的键值。一旦应用了del函数,这些键的键值对就会被删除。 示例 输出结果 运行

  • 问题内容: 我正在对JRE 进行迭代,该JRE 强制执行快速失败迭代器概念,因此如果在迭代时修改了,则会抛出a ,而不是使用method。但是,如果对象满足条件,则需要删除该对象的“逻辑伙伴”。从而阻止伙伴也被处理。我怎样才能做到这一点?也许为此使用更好的收集类型? 例。 谢谢。 问题答案: 您要从列表中删除项目,然后继续在同一列表中进行迭代。您是否可以实施两步解决方案,即在步骤1中将要删除的项目