1、出现该异常场景

  1. Iterator.remove() 迭代删除 引发

2、问题定位分析

1. Iterator.remove() 迭代删除 引发

	重复 remove 导致出现该异常
场景示例
	@Test
    public void illegalStateExceptionTest (){
        ArrayList<String> strs = new ArrayList<>();
        strs.add("1,2");
        strs.add("3,4,5");
        strs.add("6,7,8,9,10");
        Iterator<String> itr = strs.iterator();
        while (itr.hasNext()){
            String str = itr.next();
            String[] split = str.split(",");
            for (String s : split) {
                if (s.equals("4") || s.equals("5")){
                    itr.remove(); // 存在循环体,重复remove 导致异常
                    //break;
                }
            }
        }
    }
问题分析
	需要使用next方法迭代出集合中的元素 ,然后才能调用remove方法,
	否则集合可能会因为对同一个Iterator remove了多次而抛出java .lang.IllegalStateException异常。
	解决:可在循环体中 remove 后跳出循环 使用 break
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐