我有个奇怪的问题。我以为这会花我几分钟,但我现在挣扎了几个小时...以下是我得到的:
for (int i = 0; i < size; i++){
if (data.get(i).getCaption().contains("_Hardi")){
data.remove(i);
}
}
data
是ArrayList。
在ArrayList中我得到了一些字符串(总共14个左右),其中9个字符串的名称是hardi。
使用上面的代码,我想删除它们。如果我将data.remove(I);
替换为system.out.println
,那么它会打印出一些东西9次,这很好,因为_hardi在ArrayList中有9次。
但是当我使用data.remove(I);
时,它并没有删除全部9个,而是只删除了几个。我做了一些测试,我也看到了这一点:
当我将字符串重命名为:Hardi1 Hardi2 Hardi3 Hardi4 Hardi5 Hardi6
然后只删除偶数(1,3,5等等)。他一直在跳,但不知道为什么。
这里的问题是,您正在从0到size进行迭代,并且在循环中删除项。删除项目将减少列表的大小,当您试图访问大于有效大小(删除项目之后的大小)的索引时,列表的大小将会失败。
有两种方法可以做到这一点。
如果不想处理索引,请使用迭代器删除。
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中我得到了一些字符串(共14个左右),和他们的9,它得名_Hardi。 并使用上面的代码,我想删除它们。如果我使用a,那么它将打印出9次,这是好的,因为_Hardi在ArrayList中是9次。 但是,当我使用它时,它不会删除所有9个,而只会删除几个。我做了一些测试,我也
我的问题很简单:是一个,下面是我的代码: 指向的行是(Balle b:listeBalles){行的
我当前正在将一个ArrayList转换为一个字符串,以便将其发送到一个DB,这样我就可以在另一端检索它,并稍后将其转换回一个ArrayList。 我的思路是通过执行以下操作将其转换为当前的字符串 是ArrayList,看起来如下所示: 当我查看数据库时,它看起来像这样 如何删除开头的和最后的以便在数据库上看起来像? 在另一端,我可以使用以下方法获得它: (我正在使用SQLite,这是我大学项目的一
我有一个假设,它有8个项目A-H,现在我想从中删除存储在int数组中的1,3,5位置项目。我该怎么做。 我正试着和你一起做这件事 但在数组的第一个被删除的项被更改之后,在下一次迭代中它删除了错误的元素或给出异常。
有人向我推荐了两种实现这一目标的方法: 这个'search'方法应该返回ArrayList中的位置(以便可以使用)或对象引用(以便可以使用)。如果找不到工作人员,则搜索方法应返回-1(如果使用)或null(如果使用)。 然而,我不确定如何在Java中实现这一点。
问题内容: 这个问题已经在这里有了答案 : 是什么导致java.lang.ArrayIndexOutOfBoundsException,如何防止它发生? (25个答案) 4年前关闭。 所以我有另一个带有main方法的类,在该类中我调用createNumbers(),createColours(),createBalls()。当我运行程序时,我在numere.remove(nr)处得到一个Index