List集合遍歷時修改元素出現併發修改異常總結

2022-09-17 09:51:08 字數 1538 閱讀 1756

當我們在遍歷實現了collection介面與iterator介面的集合時(list、set、map), 我們可以通過遍歷索引也可以通過迭代器進行遍歷。在我們使用迭代器進行遍歷集合的時候,會獲取到當前集合的迭代物件。在裡面有封裝了迭代器的remove方法與集合自帶的remove方法,如果我們呼叫迭代器物件的remove方法是沒問題的,但是當我們呼叫集合自帶的remove方法時,就會產生concurrentmodificationexception 併發修改異常。也就是說,當我們通過迭代器進行遍歷集合的時候,是不允許集合本身在結構上發生變化的。

示例**如下:

[j**a] view plain copy

package

iteratordemo;

import

j**a.util.arraylist;

import

j**a.util.iterator;

import

j**a.util.list;

public

class

arraylistdemo

system.out.println("遍歷之前集合的長度為:");

system.out.println(list.size());

//獲取集合的迭代器物件

iteratoriterator =list.iterator();

//列印出迭代器的位址

system.out.println(iterator.tostring());

//用iterator迭代器進行遍歷

while

(iterator.hasnext())

} system.out.println("遍歷之後集合的長度為:");

system.out.println(list.size());

for(string string : list)

}

}

執行之後的結果為:

遍歷之前集合的長度為:

10j**a.util.arraylist$itr@5ecb560801

2345

6789遍歷之後集合的長度為:

5

開始進行增強for迴圈下的刪除操作

exception in thread "main"j**a.util.concurrentmodificationexception

at j**a.util.arraylist$itr.checkforcomodification(unknown source)

at j**a.util.arraylist$itr.next(unknown source)

at iteratordemo.arraylistdemo.main(arraylistdemo.j**a:35)

在上面通過增強for迴圈實現將集合進行遍歷,也產生了併發修改異常,因為在底層也是呼叫的迭代器。

如果在以後在迭代器遍歷時,需要對集合進行增刪操作時,要呼叫迭代器本身的remove方法。

List遍歷時刪除遇到的問題

這週在開發中遇到了乙個以前沒遇到的小bug,在這裡記錄下來。list集合,我們平時都經常使用。但是,我在遍歷list集合時,呼叫了list集合的remove方法來刪除集合中的元素,簡單的 結構是這樣 for string x list 但是,就是類似這樣乙個簡單的小程式,在執行時,遇到了如下的異常資...

集合遍歷時刪除和增加元素

大多數時候,遍歷集合元素的時候並不需要對元素進行增加或者刪除操作,但有些時候則需要,比如,如果集合中盛放的元素是社會上所有的人,那麼有人死亡則元素刪除,有人出生則是集合元素的增加。對於這種情況,遍歷不能按照原來那種方式去做了,而且c 中的集合對於這類有增刪動作的遍歷,也不支援foreach迴圈。有三...

List集合的遍歷學習

定義乙個簡單的arraylist集合進行遍歷 public static void main string args system.out.println 第二種遍歷方法 for int i 0 ilistiterators as.listiterator while listiterators.h...