美文网首页
Java删除List中的元素

Java删除List中的元素

作者: 土豆吞噬者 | 来源:发表于2019-07-30 17:02 被阅读0次

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);
        }
    }

相关文章

网友评论

      本文标题:Java删除List中的元素

      本文链接:https://www.haomeiwen.com/subject/synnrctx.html