當我們在遍歷實現了collection介面與iterator介面的集合時(list、set、map), 我們可以通過遍歷索引也可以通過迭代器進行遍歷。在我們使用迭代器進行遍歷集合的時候,會獲取到當前集合的迭代物件。在裡面有封裝了迭代器的remove方法與集合自帶的remove方法,如果我們呼叫迭代器物件的remove方法是沒問題的,但是當我們呼叫集合自帶的remove方法時,就會產生concurrentmodificationexception 併發修改異常。也就是說,當我們通過迭代器進行遍歷集合的時候,是不允許集合本身在結構上發生變化的。
示例**如下:
[j**a] view plain copypackage
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.concurrentmodificationexceptionat 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...