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

HashMap中的澄清@ConcurrentModificationException

步德宇
2023-03-14

我希望下面的代码中有ConcurrentModificationException,但它运行良好。

HashMap<Integer, String>table1 = new HashMap<Integer, String>();
    table1.put(1, "Sam");
    table1.put(2, "Jon");
    table1.put(3, "Doe");

    Iterator itr1 = table1.entrySet().iterator();

    table1.put(3, "DONN");
    while(itr1.hasNext())
    {
        System.out.println("---Value--" + itr1.next());
    }

根据JavaDoc forhashmap:

这个类的所有“Collection view Methods”返回的迭代器都是快速失败的:如果在迭代器创建后的任何时候,以任何方式(除了通过迭代器自己的remove方法)修改了映射,则迭代器将抛出一个ConcurrentModificationException。

因此,由于我在获得迭代器之后修改了HashMap,所以我应该得到ConcurrentModificationException。为什么不扔?

共有1个答案

云捷
2023-03-14

HashMap的当前实现中,为现有键输入项不被视为结构修改,并且永远不会触发ConcurrentModificationException。尝试使用新键PUT,例如table1.put(4,“ups”);获取ConcurrentModificationException

 类似资料:
  • 1.我了解不同的哈希映射机制和处理密钥冲突的方式(开放寻址-线性/二次探测、链接、可扩展哈希等)。哈希集/哈希映射使用哪一种? 2.我意识到好的哈希映射依赖于好的哈希函数。Java的HashSet/HashMap如何散列对象?我知道有一个散列函数,但到目前为止,对于字符串,我不需要实现它。如果我现在想对我创建的Java对象进行散列-我需要实现散列函数吗?或者Java有一种内置的创建哈希代码的方法吗

  • 问题内容: 我有一张桌子Table1 当我使用以下查询查询该表时 我得到的输出为 但是以同样的方式,当我使用以下查询时,我没有任何输出。 有人请给我指导,为什么它会那样工作,以及如何使用rownum。 问题答案: 汤姆回答了许多与Oracle有关的问题 简而言之,在应用where子句之后和应用order by子句之前,rownum可用。 在RowNum = 2的情况下,where子句中的谓词将永远

  • 所以这段时间我一直认为递归的问题是理解案例。事实证明,我的问题是理解递归案例的值。例如,向后打印数组的一部分。 原始尝试 一次有效的尝试 然而,这是一种高效的递归吗?还是有更好的办法?这是我从写出来的时候看出来的唯一方法。

  • 问题内容: 每个人都知道,或者至少每个程序员都应该知道,使用该类型可能会导致精度错误。但是,在某些情况下,精确的解决方案将是不错的选择,并且在某些情况下,使用epsilon值进行比较是不够的。无论如何,这不是重点。 我知道Python中的类型,但从未尝试使用它。它指出“十进制数可以精确表示”,我认为这意味着可以实现任何实数的聪明实现。我的第一次尝试是: 非常令人失望,我回到文档中并继续阅读: 算术

  • 问题内容: 更改了该方法的结构后,当defer调用两次时会发生什么? 例如: 其中当最后叫什么名字? 问题答案: 它取决于方法的接收者 和 变量的类型。 简短的答案:如果您使用的是包,则延迟的方法将正确关闭两个实例,因为它们具有 指针 接收器, 并且 由于返回了 指针 ( 指针 也是如此)。请参阅下面的推理和解释。 为避免混淆,我建议使用不同的变量,这样会清楚您 想要 什么以及 将要 关闭的内容:

  • 我试图了解更多关于新的苹果iBeacon协议的信息,以及它将如何应用于其他设备。 我已经看到协议本身已经被逆向工程:http://developer.radiusnetworks.com/2013/10/01/reverse-engineering-the-ibeacon-profile.html这是个好消息,但是我对协议还有一些进一步的问题。 协议是否设计为允许自定义文本消息发送到接收方客户端?