一尘不染

使用For循环从ArrayList中删除数据

java

我有一个奇怪的问题。我以为这会花我几分钟,但现在我已经挣扎了几个小时……这就是我得到的:

for (int i = 0; i < size; i++){
    if (data.get(i).getCaption().contains("_Hardi")){
        data.remove(i);
    }
}

dataArrayList. 在ArrayList中我得到了一些字符串(共14个左右),和他们的9,它得名_Hardi。

并使用上面的代码,我想删除它们。如果我replace data.remove(i);使用a,System.out.println那么它将打印出9次,这是好的,因为_Hardi在ArrayList中是9次。

但是,当我使用data.remove(i);它时,它不会删除所有9个,而只会删除几个。我做了一些测试,我也看到了:

当我将字符串重命名为:Hardi1 Hardi2 Hardi3 Hardi4 Hardi5 Hardi6

然后,它仅删除偶数(1、3、5等)。他一直在跳过1,但不知道为什么。

如何解决这个问题?或者也许是另一种删除它们的方法?


阅读 595

收藏
2020-09-08

共1个答案

一尘不染

问题是您 要从0 迭代 到大小,并且在循环内要删除项目
。删除项目将减小列表的大小,当您尝试访问大于有效大小(被删除项目后的大小)的索引时,该列表将失败。

有两种方法可以做到这一点。

如果不想处理索引,请 使用迭代器 删除。

for (Iterator<Object> it = data.iterator(); it.hasNext();) {
if (it.next().getCaption().contains("_Hardi")) {
    it.remove();
}
}

否则, 从末尾删除。

for (int i = size-1; i >= 0; i--){
    if (data.get(i).getCaption().contains("_Hardi")){
            data.remove(i);
    }
 }
2020-09-08