当前位置: 首页 > 面试题库 >

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

奚英朗
2023-03-14
问题内容

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

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,但不知道为什么。

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


问题答案:

问题是您 要从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);
    }
 }


 类似资料:
  • 我当前正在将一个ArrayList转换为一个字符串,以便将其发送到一个DB,这样我就可以在另一端检索它,并稍后将其转换回一个ArrayList。 我的思路是通过执行以下操作将其转换为当前的字符串 是ArrayList,看起来如下所示: 当我查看数据库时,它看起来像这样 如何删除开头的和最后的以便在数据库上看起来像? 在另一端,我可以使用以下方法获得它: (我正在使用SQLite,这是我大学项目的一

  • 我有个奇怪的问题。我以为这会花我几分钟,但我现在挣扎了几个小时...以下是我得到的: 是在ArrayList中我得到了一些字符串(总共14个左右),其中9个字符串的名称是hardi。 使用上面的代码,我想删除它们。如果我替换为,那么它会打印出一些东西9次,这很好,因为_hardi在ArrayList中有9次。 但是当我使用时,它并没有删除全部9个,而是只删除了几个。我做了一些测试,我也看到了这一点

  • 问题内容: 我想实现一种jQuery实时搜索。但是,发送输入到服务器之前,我想删除我的阵列,它有3点或更少的字符的所有项目(因为在德国的语言,这些话通常可以在搜索方面被忽略),所以成为 现在我的问题是,并非所有项目都在我的for循环中被删除。例如,如果我删除打字“这是一个测试”“是”,则“ a”保持不变。 我认为问题是for循环,因为如果我删除带有拼接的项目,则数组的索引会更改,因此它会继续使用“

  • 问题内容: 我想在完成后从中删除对象,但找不到解决方法。尝试像下面的示例代码中那样将其删除不会起作用。如何在此循环中访问当前对象的迭代器以将其删除? 问题答案: 您不能在增强的for循环内。您必须使用“长手”方法: 当然,并非所有的迭代器都 支持 删除,但是您可以使用。 另一种方法是建立一个额外的“要删除的像素”集合,然后在列表最后调用。

  • 所以我正在尝试创建这个循环,它可以从ArrayList中移除给定字符串中的特定字符。问题是,当一行中有两个相同的字符时,它会遗漏第二个字符,因为当第一个字符被移除时,第二个字符会在数组列表中向下推一个位置。这是我目前所掌握的。有人知道怎么解决这个吗?我仍然是java的初学者,所以任何帮助都将非常感谢。 从本例中打印出来的内容在:[u,B,u,o,p]之后,而我希望它在:[u,u,o,p]之后

  • 我有个问题。我试图从2D数组中删除符合特定条件的行。我以前使用 用户可以选择行数和列数,并用他选择的值填充表。其中一列必须包含项目的价格,这些价格将与用户给出的价格限制进行比较,低于价格的每个项目都必须从2D数组(行)中删除。我被告知使用数组。但是在这里我需要使用“for循环”和一个2D表。 到目前为止,这就是我的“删除部分” 不幸的是,我在这里遇到了一个从字符串到Int的解析问题,所以代码不能再