1. 程式人生 > >Iterator遍歷集合時不可以刪除集合中的元素問題

Iterator遍歷集合時不可以刪除集合中的元素問題

部落格用於記錄程式設計是遇到的問題,便於以後隨時複習。

Iterator是工作在一個獨立的執行緒中,擁有一個mutex鎖。Iterator被建立後會建立一個指向原來物件的單鏈索引表,當原來的物件數量發生變化時,這個索引表的內容不會同步改變,所以當索引指標向後面移動的時候就找不到要迭代的物件,按照fail-fast原則,Iterator會馬上丟擲 java.util.ConcurrentModificationException異常。所以,在Iterator工作時,不允許迭代物件被改變。但可以使用Iterator本身的方法iterator.remove()來刪除物件,該方法會在刪除當前迭代物件的同時維護索引的一致性。舉例:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TestIterator {
public void iteratorDelete(List<Integer>list){
Iterator<Integer> it=list.iterator();
while(it.hasNext()){
Integer integer=it.next();
if (integer<20) {
//可以刪除
it.remove();
//執行時異常
//list.remove(integer);
}
}
System.out.println(list.toString());
}
public static void main(String[] args) {
List<Integer>list=new ArrayList<>();
list.add(18);
list.add(20);
list.add(30);
list.add(40);
TestIterator testIterator=new TestIterator();
testIterator.iteratorDelete(list);
}
}