ConcurrentModificationException异常
代码
    public static void main(String[] args) {

       test test = new test();

       test.bugTwo();

  }

   private void bugTwo() {

       List<Map<String, Object>> list = new ArrayList<>();
       HashMap<String, Object> map = new HashMap<>();

       map.put("1", "1");
       map.put("2", "2");
       map.put("3", "3");
       map.put("4", "4");
       list.add(map);

       System.out.println(list);

       for (Map<String, Object> demo : list) {

           for (int i = 0; i < 2; i++) {
               Map<String, Object> iMap = new HashMap<>();
               iMap.put("1", "11" + i);
               iMap.put("2", "22" + i);
               iMap.put("3", "33" + i);
               iMap.put("4", "44" + i);
               list.add(map);
          }

      }

       System.out.println(list);

  }
结果
原因

ConcurrentModificationException 是 Java 中的一个异常类型,属于 java.util.ConcurrentModificationException 类。它是一种运行时异常(RuntimeException)。

这个异常通常发生在多线程或者非线程安全的上下文中,当一个集合(比如 ArrayList、LinkedList、HashSet 等)正在进行迭代(遍历)时,有另一个线程或操作修改了这个集合的结构(如添加、删除或替换元素)。

1、当在使用迭代器(Iterator)或增强型 for 循环遍历集合时,同时尝试修改集合(除了使用 Iterator 的 remove() 方法外),会导致 ConcurrentModificationException。

2、在多线程环境下,如果一个线程正在遍历集合,而另一个线程修改了这个集合,同样会触发 ConcurrentModificationException。

解决

创建一个新的 List 进行添加元素

    public static void main(String[] args) {

       test test = new test();

       test.bugTwo();

  }

   private void bugTwo() {

       List<Map<String, Object>> list = new ArrayList<>();
       HashMap<String, Object> map = new HashMap<>();

       map.put("1", "1");
       map.put("2", "2");
       map.put("3", "3");
       map.put("4", "4");
       list.add(map);

       System.out.println(list);
//       for (Map<String, Object> demo : list) {
//
//           for (int i = 0; i < 2; i++) {
//               Map<String, Object> iMap = new HashMap<>();
//               iMap.put("1", "11" + i);
//               iMap.put("2", "22" + i);
//               iMap.put("3", "33" + i);
//               iMap.put("4", "44" + i);
//               list.add(map);
//           }
//
//       }

       List<Map<String, Object>> listCopy = new ArrayList<>();

       for (Map<String, Object> demo : list) {

           listCopy.add(demo);

           for (int i = 0; i < 2; i++) {
               Map<String, Object> iMap = new HashMap<>();
               iMap.put("1", "11" + i);
               iMap.put("2", "22" + i);
               iMap.put("3", "33" + i);
               iMap.put("4", "44" + i);
               listCopy.add(iMap);
          }

      }

       list.clear();
       list.addAll(listCopy);

       System.out.println(list);

  }
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇