`
Thomas会Coding
  • 浏览: 96644 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hashmap的remove异常问题

 
阅读更多

jdk为什么这样设计,只允许通过iterator进行remove操作?
HashMap和keySet的remove方法都可以通过传递key参数删除任意的元素,而iterator只能删除当前元素(current),一旦删除的元素是iterator对象中next所正在引用的,如果没有通过modCount、 expectedModCount的比较实现快速失败抛出异常,下次循环该元素将成为current指向,此时iterator就遍历了一个已移除的过期数据。

分享到:
评论

相关推荐

    hashmap.zip

    8. **迭代器与快速失败**:HashMap提供了迭代器,但在并发修改HashMap时,如果不使用迭代器的`remove()`方法,而是直接修改HashMap,迭代器可能会抛出`ConcurrentModificationException`。这种行为称为快速失败。 9...

    HashMap二级词典

    4. **键值对的插入、查找和删除**:`HashMap`的插入(put)、查找(get)和删除(remove)操作的时间复杂度在平均情况下是O(1),最坏情况下是O(n)(哈希冲突严重时)。 在实现这个词典应用时,还需要考虑文件I/O...

    HashMap与HashTable的区别(含源码分析)

    - `HashTable`的迭代器是失败快速的,即在迭代过程中修改表可能导致`ConcurrentModificationException`,而`HashMap`的迭代器是弱一致性的,修改不会抛出异常,但可能在迭代时看到不一致的状态。 5. 源码分析: ...

    HashMap和List遍历方法及如何遍历删除元素总结

    要解决HashMap遍历删除元素的问题,可以使用Iterator来遍历HashMap,并使用Iterator的remove方法来删除元素。这样可以避免ConcurrentModificationException异常。 小结 在遍历和删除HashMap和List的元素时,需要...

    深入解读大厂java面试必考点之HashMap全套学习资料

    5. **迭代器遍历**:HashMap的迭代器是fail-fast类型的,即当在遍历过程中修改了HashMap,迭代器会抛出`ConcurrentModificationException`异常。若要在遍历期间修改HashMap,应使用`Iterator`的`remove()`方法。 6....

    hashmap和hashtable的区别.docx

    - HashMap 的迭代器(Iterator)是 fail-fast 的,这意味着如果在遍历过程中有其他线程修改了 HashMap(除了迭代器自身的 `remove()` 方法),迭代器将抛出 ConcurrentModificationException。 - 而 Hashtable 的 ...

    Java HashMap 如何正确遍历并删除元素的方法小结

    Java HashMap 是一种常用的数据结构,用于存储键值对儿,但是在遍历和删除元素时,需要注意一些特殊的情况,否则可能会出现异常或错误。本文将介绍 Java HashMap 遍历和删除元素的正确方法。 一、HashMap 遍历方法 ...

    基于HashMap的学生管理系统

    为了确保系统的健壮性,还需要考虑一些额外的方面,如输入验证、异常处理和并发控制。如果多个线程同时访问HashMap,需要使用`ConcurrentHashMap`来保证线程安全。此外,还可以通过实现Comparable接口或提供...

    HashMap 和 Hashtable的区别

    但迭代器自身的 `remove()` 方法移除元素则不会抛出异常。 - `Hashtable` 的 enumerator 迭代器不是 fail-fast 的,所以在多线程环境下,当其他线程修改 `Hashtable` 时,不会立即抛出异常,但在某些情况下可能会...

    ArrayList和HashMap如何自己实现实例详解

    然而,由于本问题的描述中并没有提供完整的MyHashMap实现,我们将基于HashMap的一般工作原理进行解释。 HashMap的主要功能包括存储键值对、查找键对应的值、删除键值对等。它通过计算键的哈希值来确定元素在数组中...

    Java中HashMap和Hashtable的区别浅析

    这意味着在多线程环境中,如果多个线程同时修改HashMap,可能会导致数据不一致或异常。程序员需要在多线程场景下自行管理同步,例如使用`Collections.synchronizedMap()`方法包装HashMap。 - 相反,Hashtable是线程...

    java中Hashtable和HashMap的区别分析

    - `Hashtable`不支持`remove()`方法返回旧值,而`HashMap`的`remove()`方法会返回被移除的键对应的值。 - `Hashtable`不区分键的`equals()`和`hashCode()`方法,而`HashMap`要求键的`equals()`和`hashCode()`方法...

    java7hashmap源码-learning-record:学习轨迹记录

    删除元素(Remove Element) 7月8号 7月5号 复习hashMap concurrentHashmap [LeetCode 70. 爬楼梯(Climbing Stairs).md](Java基础/数据结构与算法/LeetCode/LeetCode 70. 爬楼梯(Climbing Stairs).md) 7月3号 ...

    java.util.ConcurrentModificationException 解决方法

    则使用会报以下异常: Java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) at java.util.HashMap$KeyIterator.next(HashMap.java:828) 例如以下程序...

    电话本管理系统java

    系统将根据提供的姓名调用HashMap的remove()方法,删除相应的键值对。 4. **更新联系人信息**:如果用户需要更改某个联系人的电话号码,系统会先通过姓名找到该联系人,然后更新其电话号码。 5. **显示所有联系人*...

    HashMaps家庭作业

    3. `remove()`:根据键移除键值对,如果键不存在,不抛出异常。 4. `containsKey()`和`containsValue()`:分别检查键和值是否存在于HashMap中。 5. `size()`:返回HashMap中键值对的数量。 6. `clear()`:清空...

    java备忘录

    4. 异常处理:在处理用户输入或进行数据操作时,可能需要捕获和处理可能出现的异常,如空指针异常、非法参数异常等。 5. 流程控制:应用可能使用if/else语句、for/while循环等控制流程,实现数据的增删改查逻辑。 ...

    好几天解决不了的问题源代码

    `Map`提供了多种方法来操作这些键值对,如`put()`(添加键值对)、`get()`(根据键获取值)、`remove()`(删除键值对)等。`Map`的实现类有`HashMap`, `TreeMap`, `LinkedHashMap`等,它们各自有不同的特性和性能...

    java面试题经典讲诉2023年最新题目.docx

    HashMap使用的是快速失败迭代器,在迭代器创建后,除非通过迭代器自身的remove或者add方法,其他任何方式的修改都会抛出异常。9. HashMap底层实现原理和扩容机制JDK1.8以前:数组+单链表的组合,以键值对的方式存储...

    我的java笔记

    Error和Exception的区别在于,Error表示系统级别的严重问题,如内存溢出,通常无法恢复,而Exception表示程序设计或实现时可以预见的问题,可以通过异常处理机制进行处理。 同步和异步主要涉及多线程编程。同步是指...

Global site tag (gtag.js) - Google Analytics