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

在Java中修改对象时如何迭代对象?

贺雅健
2023-03-14
问题内容

我正在尝试遍历HashMap

Map<String, Integer> group0 = new HashMap<String, Integer>();

…并提取中的每个元素group0。这是我的方法:

// iterate through all Members in group 0 that have not been assigned yet
for (Map.Entry<String, Integer> entry : group0.entrySet()) {

    // determine where to assign 'entry'
    iEntryGroup = hasBeenAccusedByGroup(entry.getKey());
    if (iEntryGroup == 1) {
        assign(entry.getKey(), entry.getValue(), 2);
    } else {
        assign(entry.getKey(), entry.getValue(), 1);
    }
}

这里的问题是对的每次调用assign()都会从中删除元素group0,从而修改其大小,从而导致以下错误:

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
    at java.util.HashMap$EntryIterator.next(HashMap.java:834)
    at java.util.HashMap$EntryIterator.next(HashMap.java:832)
    at liarliar$Bipartite.bipartition(liarliar.java:463)
    at liarliar$Bipartite.readFile(liarliar.java:216)
    at liarliar.main(liarliar.java:483)

那么…当元素group0动态变化时,我该如何遍历其中的元素呢?


问题答案:

其他人则提到了正确的解决方案,而没有实际阐明。所以这里是:

Iterator<Map.Entry<String, Integer>> iterator = 
    group0.entrySet().iterator();
while (iterator.hasNext()) {
    Map.Entry<String, Integer> entry = iterator.next();

    // determine where to assign 'entry'
    iEntryGroup = hasBeenAccusedByGroup(entry.getKey());

    if (iEntryGroup == 1) {
        assign(entry.getKey(), entry.getValue(), 2);
    } else {
        assign(entry.getKey(), entry.getValue(), 1);
    }

    // I don't know under which conditions you want to remove the entry
    // but here's how you do it
    iterator.remove();
}

另外,如果您想安全地在assign函数中更改映射,则需要传入迭代器(只能使用remove函数,并且只能使用一次)或条目来更改值。



 类似资料:
  • 在Java8流中,允许我修改/更新内部的对象吗?为。:

  • 通过一个简单的数组,我可以使用标准的循环来实现: 但是如何用实物来做呢?

  • 问题内容: 我正在尝试编写一个程序,该程序允许您输入班级中的学生人数,然后为每个学生输入3个测试成绩以计算平均值。我是编程新手,但会不断收到错误消息,我不了解它的含义或解决方法。这是我到目前为止所拥有的: 问题答案: 当你写 您的意图是“运行这段代码时间,我刚才输入的值在哪里”。但是在Python,你传递给事情一个声明需求是某种迭代对象的。在这种情况下,您想要的只是一个statement。这将生成

  • 现在,这段代码运行良好,该项从p对象和jlist中都被删除,但它在it.next()行抛出一个“ConcurrentModificationException”异常。 我怎么解决这个?

  • 问题内容: 假设我有一个整数集,并且我想增加集合中的每个整数。我该怎么做? 我可以在迭代时添加和删除集合中的元素吗? 在迭代原始集合时,是否需要创建一个新集合以将元素“复制并修改”到其中? 编辑:如果集合中的元素是不可变的呢? 问题答案: 您可以在迭代期间使用Iterator对象安全地从集合中删除;尝试在迭代时通过其API修改集合会破坏迭代器。Set类通过getIterator()提供一个迭代器。

  • 我目前正在努力迭代从第三方API获取的JSON对象。您可能会看到,以前没有真正处理过获取API。 这是我正在获取的JSON文件: 链接到JSON文件 为了获取数据,我使用一个useFetch脚本,它看起来像这样: 我稍后尝试导出的只是每个角色/冠军的名称(他本身就是一个对象,包括名称、描述等) 不幸的是,我在尝试转换JSON对象表示: