集合框架(併發修改異常產生的原因及解決方案)

来源:https://www.cnblogs.com/ztg-java-xuexi/archive/2022/03/22/16039655.html
-Advertisement-
Play Games

我有一個集合,如下,請問,我想判斷裡面有沒有"world"這個元素,如果有,我就添加一個"javaee"元素,請寫代碼實現。 1 package cn.itcast_04; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 ...


我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。

 

 1 package cn.itcast_04;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 import java.util.List;
 6 import java.util.ListIterator;
 7 
 8 /*
 9  * 问题?
10  *         我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
11  * 
12  * ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。 
13  * 产生的原因:
14  *         迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。
15  *         其实这个问题描述的是:迭代器遍历元素的时候,通过集合是不能修改元素的。
16  * 如何解决呢?
17  *         A:迭代器迭代元素,迭代器修改元素
18  *             元素是跟在刚才迭代的元素后面的。
19  *         B:集合遍历元素,集合修改元素(普通for)
20  *             元素在最后添加的。
21  */
22 public class ListIteratorDemo2 {
23     public static void main(String[] args) {
24         // 创建List集合对象
25         List list = new ArrayList();
26         // 添加元素
27         list.add("hello");
28         list.add("world");
29         list.add("java");
30 
31         // 迭代器遍历
32         // Iterator it = list.iterator();
33         // while (it.hasNext()) {
34         // String s = (String) it.next();
35         // if ("world".equals(s)) {
36         // list.add("javaee");
37         // }
38         // }
39 
40         // 方式1:迭代器迭代元素,迭代器修改元素
41         // 而Iterator迭代器却没有添加功能,所以我们使用其子接口ListIterator
42         // ListIterator lit = list.listIterator();
43         // while (lit.hasNext()) {
44         // String s = (String) lit.next();
45         // if ("world".equals(s)) {
46         // lit.add("javaee");
47         // }
48         // }
49 
50         // 方式2:集合遍历元素,集合修改元素(普通for)
51         for (int x = 0; x < list.size(); x++) {
52             String s = (String) list.get(x);
53             if ("world".equals(s)) {
54                 list.add("javaee");
55             }
56         }
57 
58         System.out.println("list:" + list);
59     }
60 }

 

 1 package Day15;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 import java.util.ListIterator;
 6 
 7 //问题?
 8 // *
 9 // 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,
10 // 如果有,我就添加一个"javaee"元素,请写代码实现。
11 public class BFXG {
12     public static void main(String[] args) {
13         //创建List集合对象
14         List A = new ArrayList();
15 
16         //向集合内添加元素
17         A.add("hello");
18         A.add("world");
19         A.add("java");
20 
21 //        //方式一
22 //        //利用迭代器进行遍历---并向集合内添加元素
23 //        //Iterator迭代器没有添加功能,所以我们使用Iterator的子类ListIterator进行添加
24 //        //利用集合对象创建迭代器对象--listIterator
25 //        ListIterator B = A.listIterator();
26 //        //进行循环遍历--利用ListIterator进行遍历判断条件为hasNext获取方法是next
27 //        while(B.hasNext()){
28 //            //类型转换---强制类型转换为字符串类型
29 //            String MM = (String)B.next();
30 //            //向集合内添加字符----ListTerator下的添加功能
31 //            if("world".equals(MM)){
32 //                 B.add("javaee");
33 //
34 //            }
35 //        }
36 //        System.out.println(A);
37 
38          //方式二for循环遍历--集合添加元素
39         //利用集合的长度进行--控制
40         for(int x =0;x<A.size();x++){
41              //利用List集合中的get()获取方法来进行元素的获取--返回列表中指定位置的元素--并进行类型的转换
42             String MM= (String) A.get(x);
43             //对转换后的字符串进行判断--利用字符串中的equals方法进行两个字符串的判断
44             if("world".equals(MM)){
45                 //向集合内添加元素
46                 A.add("javaee");
47 
48             }
49         }
50         //进行对集合的输出查看
51         System.out.println(A);
52         
53     }
54 
55 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • AWS 這一次的重磅炸彈再次引領了行業的革新理念 —— 像其他任何 IT 採購一樣採購 5G 專網。 ...
  • 簡化版設計之初就是為了從當前頁作用域對象讀取數據並輸出,所以從 request,session,application 讀取數據並輸出時應該避免使用簡化版EL表達式 ...
  • Java面向對象 初識面向對象 面向過程 & 面向對象 面向過程思想 步驟清晰簡單,第一步做什麼,第二部做什麼... 面對過程適合處理一些較為簡單的問題 面向對象思想 物以類聚,分類的思維模式,思考問題首先會解決問題需要哪些分類,然後對這些分類進行單獨思考。最後,才對某個分類下的細節進行面向過程思索 ...
  • 本文通過一個python的實際案例的設計,來講解python面向對象的技術——類的繼承中必用的super函數的邏輯。其實我們可以把python中類的繼承理解成這樣的一個過程:當我們在括弧中明確了父類時,其實已經引用了父類的成員函數,但是並沒有執行父類的初始化函數。在執行子類的初始化函數的同時,會檢查... ...
  • 疫情太嚴重了,有很多小伙伴都不能出門玩耍了。給大家看一個特別的風景吧,Python煙花代碼,雖然沒有現實中的煙花那麼美麗,但是在特殊時期足矣安慰自己了。 先給大家看一下效果圖 代碼如下 #####需要Python資料的加Q群:906715085###### -*- coding: utf-8 -*- ...
  • 前言 本文將解決以下問題: 如何將Linux下任意位置的項目(虛擬目錄)部署到tomcat? 如何將項目部署到伺服器特定埠? 如何在一個伺服器上部署多個web應用? 本例中 系統:Linux version 3.10.0-514.el7.x86_64、tomcat版本:8.0.30.0、jdk 版 ...
  • 在使用 Python 列表時, 出現了修改其中一個列表, 其他列表聯動改變這個情況, 在查閱文檔後, 寫在這裡記錄一下. 出現這個情況的原因是因為我使用了 a = b 這個賦值語句, 我下意識的認為 a, b 是兩個不同的對象, 其實在 Python 一切都是對象, 所謂的變數, 只是指向一個對象的 ...
  • 今天這篇博客也是學習springboot做的學習筆記,關於springboot集成redis,分享給有需要的小伙伴們,視頻看的動力節點 動力節點王鶴老師講解的springboot教程,由淺入深,帶你體驗Spring Boot的極速開發過程,內容豐富,涵蓋了SpringBoot開發的方方面面,並且同步 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...