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

为什么在ArrayList中出现ConcurrentModificationException?

华谭三
2023-03-14
问题内容

为什么下面的代码抛出ConcurrentModificationException?JoshBloch可以避免ConcurrentModificationException。

ArrayList<Integer> list=new ArrayList<Integer>();
list.add(100);
list.add(200);
list.add(300);
list.add(400);
for(Integer field : list) {    
    list.remove(field);
    list.add(200);
}

问题答案:

使用“ for each”循环时,不能在列表上使用remove。相反,您可以使用此方法在迭代器上调用remove:

Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()) {
    Integer integer = iterator.next();

    // ...check if you want to remove this one...

    iterator.remove();
}

如果您实际上想用“ 200”代替每个值,或用其他值代替,则建立一个新列表可能更有意义:

List<Integer> newList = new ArrayList<Integer>();

Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()) {
    Integer integer = iterator.next();

    newList.add(integer);

    iterator.remove();
}


 类似资料:
  • 问题内容: 我在以下一行中得到一个: 我正在打印所有值: 输出: 那我为什么要得到呢?请帮助。谢谢。完整的堆栈跟踪如下: 问题答案: 简单的答案:您在该位置没有得到NullpointerException- 至少不是根据您发布的stacktrace。Liferay的LoginAction没有原始的StrutsAction。如果您使用的是6.2 GA5,则这是引发NullpointerExcepti

  • 问题内容: 实现接口。接口没有方法。当我检查它没有实现接口。 那么,在实现的意义何在? 问题答案: 没有方法的接口在Java中称为标记接口。 根据RandomAccess的JavaDoc: List实现使用的标记接口,指示 它们支持快速(通常为恒定时间)随机访问。 有关更多信息,请检查两个JavaDoc页面。 http://docs.oracle.com/javase/6/docs/api/jav

  • 问题内容: 在Java 实现中基于对象数组。 谁能解释我为什么使用数组而不是数据存储的实现?使用有什么好处? 问题答案: 在Java中,创建通用类型的数组并不容易。 简单的方法不能编译: 替换为,一切都很好(以容器实现中其他地方增加的复杂性为代价)。 有其他方法,但是它们呈现了一组不同的权衡。有关广泛的讨论,请参见如何在Java中创建通用数组?

  • 问题内容: 我记得在Java 8之前,默认容量是10。 令人惊讶的是,对默认(void)构造函数的评论仍然是: 来自: 问题答案: 从技术上讲,如果您允许对备用数组进行延迟初始化,则它为,而不是零。看到: 哪里 您所指的只是在所有最初为空的对象之间共享的大小为零的初始数组对象。即 懒惰地保证的容量,Java 7中也存在这种优化。 __ 诚然,建设者合同并不完全准确。也许这是造成混乱的根源。 背景

  • 问题内容: 我们注意到,用C#(或Java)开发的软件中的许多错误都导致NullReferenceException。 为什么在语言中甚至包含了“ null”? 毕竟,如果没有“ null”,那么我就不会有错误,对吧? 换句话说,如果没有null,该语言的什么功能将无法正常工作? 问题答案: “ C#父亲” Anders Hejlsberg在他的《计算机世界》采访中谈到了这一点: 例如,在类型系统

  • 我的MySQL表出现死锁。只涉及一个表,我可以始终如一地复制它。只有当我有多个线程运行代码时才会发生这种情况。 下面是表格: 然后,我在每个线程中运行这2个查询,每个线程具有不同的user_id值。 需要注意的是,当调用DELETE语句时,数据库中从不存在user_id X。正在使用运行这些查询的代码位创建新用户。然而,该函数允许我修改用户的帐户,因此,从旧用户的团队中删除现有的角色。 所以,当足