Advertisement

遍历HashMap导致增删问题(引发错误)

阅读量:

背景

在与朋友的一次交流过程中,对方提及了一个具体的问题:在对map进行遍历操作时,执行了remove方法后,程序抛出了ConcurrentModificationException异常。这促使我进一步查阅相关源码,以深入理解其背后的原因。

所使用的JDK版本为1.8

探究

进入HashMap源码后可以观察到,在每次循环即将结束时,系统会对modCount的数值进行一次验证,一旦发现该值发生改变,便会触发ConcurrentModificationException异常。

复制代码
 @Override

    
 public void forEach(BiConsumer<? super K, ? super V> action) {
    
     Node<K,V>[] tab;
    
     if (action == null)
    
     throw new NullPointerException();
    
     if (size > 0 && (tab = table) != null) {
    
     int mc = modCount;
    
     for (int i = 0; i < tab.length; ++i) {
    
         for (Node<K,V> e 

全部评论 (0)

还没有任何评论哟~