今天遇到一個問題,使用迭代器在刪除set中的元素時總是拋出異常:java.lang.IllegalStateException
貼出將會拋出異常的代碼爲
public static void main(String[] args) {
set.add(new Long(1));
set.add(new Long(1));
set.add(new Long(2));
set.add(new Long(3));
set.add(new Long(3));
set.add(new Long(4));
if(set.size()>2){
Iterator it=set.iterator();
int i=0;
while(it.hasNext()){
i++;
if(i>=2){
break;
}
it.remove();
}
}
System.out.println(Arrays.toString(set.toArray()));
}
多方查找資料,無果,最後自己找到問題所在:
更正後的代碼爲
public static void main(String[] args) {
set.add(new Long(1));
set.add(new Long(1));
set.add(new Long(2));
set.add(new Long(3));
set.add(new Long(3));
set.add(new Long(4));
if(set.size()>2){
Iterator it=set.iterator();
int i=0;
while(it.hasNext()){
i++;
if(i>=2){
break;
}
it.next();//注意這裏
it.remove();
}
}
System.out.println(Arrays.toString(set.toArray()));
}
兩邊代碼唯一差別在於it.next();
問題得以解決,但是沒有跟進底層詳細分析,但是據我估計原因有可能是,當前迭代鏈表在不調用it.next()時,迭代元素未指向鏈表中的元素導致錯誤。