IllegalStateException

例1

public static void main(String[]sdf){
        List<String> list = new ArrayList<String>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        Iterator<String> it = list.iterator();
        if(it.hasNext()){
            it.remove();
        }
        System.out.println(list.toString());
    }

Console:

Exception in thread "main" java.lang.IllegalStateException
at java.util.ArrayList$Itr.remove(Unknown Source)

例2

public static void main(String[]sdf){
        List<String> list = new ArrayList<String>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        Iterator<String> it = list.iterator();
        if(it.hasNext()){
            it.next();
            it.remove();
        }
        System.out.println(list.toString());
    }

Console:

[2, 3, 4]

例3

    public static void main(String[]sdf){
        List<String> list = new ArrayList<String>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        Iterator<String> it = list.iterator();
        if(it.hasNext()){
            it.next();
            it.next();
            it.remove();
        }
        System.out.println(list.toString());
    }

Console:

[1, 3, 4]

例4

public static void main(String[]sdf){
        List<String> list = new ArrayList<String>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        Iterator<String> it = list.iterator();
        if(it.hasNext()){
            it.next();
            it.remove();
            it.remove();
        }
        System.out.println(list.toString());
    }

Console:

Exception in thread "main" java.lang.IllegalStateException
at java.util.ArrayList$Itr.remove(Unknown Source)

附:

remove

void remove()
从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。每次调用 next 只能调用一次此方法。如果进行迭代时用调用此方法之外的其他方式修改了该迭代器所指向的 collection,则迭代器的行为是不确定的。
抛出:
UnsupportedOperationException - 如果迭代器不支持 remove 操作。
IllegalStateException - 如果尚未调用 next 方法,或者在上一次调用 next 方法之后已经调用了remove 方法。
原文地址:https://www.cnblogs.com/zno2/p/4495204.html