Big*_*low 19 java android arraylist
我遇到了一个奇怪的问题.我认为这会花费我几分钟,但我现在正在努力几个小时......这就是我得到的:
for (int i = 0; i < size; i++){
if (data.get(i).getCaption().contains("_Hardi")){
data.remove(i);
}
}
Run Code Online (Sandbox Code Playgroud)
该data是ArrayList.
在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 Hardi5 Hardi6
然后它只删除偶数(1,3,5等).他一直在跳过1,但无法弄清楚原因.
如何解决这个问题?或者可能是另一种方法来删除它们?
Ram*_*PVK 45
这里的问题是你从0到大小迭代,在循环内你正在删除项目.删除项目将减小列表的大小,当您尝试访问大于有效大小的索引(删除项目后的大小)时,列表将失败.
有两种方法可以做到这一点.
如果您不想处理索引,请使用迭代器删除.
for (Iterator<Object> it = data.iterator(); it.hasNext();) {
if (it.next().getCaption().contains("_Hardi")) {
it.remove();
}
}
Run Code Online (Sandbox Code Playgroud)
否则,从最后删除.
for (int i = size-1; i >= 0; i--){
if (data.get(i).getCaption().contains("_Hardi")){
data.remove(i);
}
}
Run Code Online (Sandbox Code Playgroud)
mat*_*t b 20
迭代时,不应从列表中删除项目.相反,使用Iterator.remove()如下:
for (Iterator<Object> it = list.iterator(); it.hasNext();) {
if ( condition is true ) {
it.remove();
}
}
Run Code Online (Sandbox Code Playgroud)
JMa*_*sch 12
每次删除项目时,您正在更改其前面的索引(因此当您删除列表[1]时,列表[2]变为列表[1],因此跳过.
这是一个非常简单的方法:(倒数而不是向上)
for(int i = list.size() - 1; i>=0; i--)
{
if(condition...)
list.remove(i);
}
这是因为当您从列表中删除一个元素时,列表的元素会向上移动。因此,如果您删除第一个元素,即索引 0 处的元素,索引 1 处的元素将移至索引 0,但您的循环计数器将在每次迭代中不断增加。所以你得到的不是更新的第 0 个索引元素,而是第一个索引元素。因此,每次从列表中删除一个元素时,只需将计数器减一。
您可以使用以下代码使其正常工作:
for (int i = 0; i < data.size(); i++){
if (data.get(i).getCaption().contains("_Hardi")){
data.remove(i);
i--;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33268 次 |
| 最近记录: |