问题描述
我有以下代码-
import java.util.ArrayList;
public class ArrayListExp{
public static void main (String[] args){
ArrayList<String> name = new ArrayList<String>();
name.add("Chris");
name.add("Lois");
name.add("Meg");
name.add("Meg");
name.add("Brain");
name.add("Peter");
name.add("Stewie");
System.out.println(name);
for ( int i = 0; i < name.size(); i++){
String oldName = name.get(i);
if(oldName.equals("Meg"))
{
name.remove(i);
}
}
System.out.println(name);
}
}
但是在这里它给了我输出-
But here it gives me output -
[Chris, Lois, Meg, Meg, Brain, Peter, Stewie]
[Chris, Lois, Meg, Brain, Peter, Stewie]
我不明白这一点,为什么不能删除Meg
,但是在这种情况下,我只尝试了一个Meg
.当我最后添加几个Meg
时,我不会从ArrayList
中删除一个Meg
.为什么?
I am not getting the point, why this is not removing Meg
but I have tried with only one Meg
in that case it is working. And I when I am adding few more Meg
in last the one Meg
is not removed from the ArrayList
. Why?
推荐答案
删除第一个"Meg"时,索引为i=2
.然后它递增,但是由于"Meg"之一已被删除,因此现在name.get(3)
是"Brain".因此,您实际上并没有检查第二个"Meg".
When you remove the first "Meg", the index i=2
. Then it's incremented, but since one of the "Meg" is already removed, now name.get(3)
is "Brain". So you didn't actually check the second "Meg".
要解决此问题.您可以在删除元素时减少索引:
To fix the problem. you can decrement the index when you remove an element:
public class ArrayListExp{
public static void main (String[] args){
ArrayList<String> name = new ArrayList<String>();
name.add("Chris");
name.add("Lois");
name.add("Meg");
name.add("Meg");
name.add("Brain");
name.add("Peter");
name.add("Stewie");
System.out.println(name);
for ( int i = 0; i < name.size(); i++){
String oldName = name.get(i);
if(oldName.equals("Meg"))
{
name.remove(i);
i--;
}
}
System.out.println(name);
}
}
这篇关于ArrayList.remove不在循环中工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!