1. 程式人生 > 其它 >集合框架(併發修改異常產生的原因及解決方案)

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

我有一個集合,如下,請問,我想判斷裡面有沒有"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 }