Java删除List中的元素

for循环遍历删除

使用for遍历删除的问题在于删除某元素后,List的大小变化了,会导致遍历时漏掉某些元素,例如在下面的代码中List的大小为6,删除第1个元素后第2次循环会访问原List中的第3个元素而不是第2个元素。

    private void deleteElementInList(ArrayList<String> list,String e){
        for (int i=0;i<list.size();i++){
            if (list.get(i).equals(e)){
                list.remove(i);
            }
        }
    }

    @Test
    public void testDeleteElementInList() {
        ArrayList<String> list = new ArrayList<>(Arrays.asList("a", "a", "c","a","b","c"));
        deleteElementInList(list,"a");
        for (String e:list){
            System.out.println(e);
       

增强型for循环遍历删除

这种方式的问题在于删除元素后继续循环会触发ConcurrentModificationException异常,删除后马上break则不会触发异常。

    private void deleteElementInList(ArrayList<String> list,String e){
        for (String str:list){
            if (str.equals(e)){
                list.remove(str);
            }
        }
    }

    @Test
    public void testDeleteElementInList() {
        ArrayList<String> list = new ArrayList<>(Arrays.asList("a", "a", "c","a","b","c"));
        deleteElementInList(list,"a");
        for (String e:list){
            System.out.println(e);
        }
    }

迭代器遍历删除

这种方式可以正常删除多个元素。

    private void deleteElementInList(ArrayList<String> list,String e){
        Iterator<String> iter=list.iterator();
        while (iter.hasNext()){
            String str=iter.next();
            if (str.equals(e)){
                iter.remove();
            }
        }

    }

    @Test
    public void testDeleteElementInList() {
        ArrayList<String> list = new ArrayList<>(Arrays.asList("a", "a", "c","a","b","c"));
        deleteElementInList(list,"a");
        for (String e:list){
            System.out.println(e);
        }
    }
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页