Java ArrayList在foreach中remove的

版权声明:转载请注明出处@Author anlijie https://blog.csdn.net/m0_38101105/article/details/82534418

我告诉你,这种方式会报错

@Test(expected = ConcurrentModificationException.class)
    public void testListForeachRemoveThrow() {
        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");

        for (String s : list) {
            list.remove(s);
        }
    }

    @Test(expected = ConcurrentModificationException.class)
    public void testListForeachAddThrow() {
        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");

        for (String s : list) {
            list.add(s);
        }
    }

不能在foreach的时候添加元素和删除元素否则会报错
你可以优雅的这样

@Test
    public void testListForiRight() {
        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");

        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
            list.remove(i);
            i--;  //位置前挪了减回去就行了
        }
    }
@Test
    public void testIteratorRemove() {
        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");

        Iterator<String> itr = list.iterator();
        while (itr.hasNext()) {
            String s = itr.next();
            System.out.println(s);
            itr.remove();
        }
    }

猜你喜欢

转载自blog.csdn.net/m0_38101105/article/details/82534418