java關於set的remove

今天遇到一個問題,使用迭代器在刪除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()時,迭代元素未指向鏈表中的元素導致錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章