关于 List 删除元素的笔记

有以下代码

个人理解,可能有错

MiBean.java

public class MiBean {
    private int id;
    private String name;

    public MiBean(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
List<MiBean> miBeanLists = new ArrayList<>();
miBeanLists.add(new MiBean(9, "小米 10"));
miBeanLists.add(new MiBean(8, "小米 10 Pro"));
miBeanLists.add(new MiBean(7, "小米 10 Ultra"));
miBeanLists.add(new MiBean(12, "Redmi K30 Pro"));
miBeanLists.add(new MiBean(11, "Redmi K30 5G"));
miBeanLists.add(new MiBean(10, "Redmi K30 4G"));

//我以为可以直接遍历,然后调用 remove 方法移除
for(int i=0; i<miBeanLists.size(); i++){
    miBeanLists.remove(i);
}


//结果它只能删除部分

//究其原因,原来是当删除之后  i<miBeanLists.size() 会重新判断
//因为我们之前删除了一个,所以在删除之后加一句 i--; 就可以全部删除了
//修改后的代码如下

for(int i=0; i<miBeanLists.size(); i++){
    miBeanLists.remove(i);
    i--;
}

结论

究其原因,原来是当删除之后 i<miBeanLists.size() 会重新判断
因为我们之前删除了一个,所以在删除之后加一句 i--; 就可以全部删除了

复制别人总结的

在代码中,删除元素后,需要把下标减一。这是因为在每次删除元素后,ArrayList会将后面部分的元素依次往上挪一个位置(就是copy),所以,下一个需要访问的下标还是当前下标,所以必须得减一才能把所有元素都遍历完

如无特别声明,该文章均为 现在网NowTime.cc)原创,转载请遵循 署名-非商业性使用 4.0 国际(CC BY-NC 4.0) 协议,即转载请注明文章来源。


标签: Java

赞 (0)

添加新评论