为什么ArrayList.remove不工作 [英] Why ArrayList.remove is not working
问题描述
我有以下code -
I have following code-
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]
我没有得到这一点,这是为什么不删除梅格
但我只有一个梅格
试图在这种情况下,它是工作。而我,当我加入一些更多的梅格
在最后一个梅格
不是从的ArrayList
。为什么呢?
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?
推荐答案
在删除第一个梅格,该指数 I = 2
。那么它的增加,但由于梅格之一,已被移除,现在 name.get(3)
是大脑。所以你实际上并没有检查第二个梅格。
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不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!