我有以下代码-
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);
}
}
但是这里它给了我输出-
[Chris, Lois, Meg, Meg, Brain, Peter, Stewie]
[Chris, Lois, Meg, Brain, Peter, Stewie]
我不明白为什么这没有删除 Meg
但我已经尝试过只使用一个 Meg
在这种情况下它可以工作。当我在最后添加一些 Meg
时,Meg
没有从 ArrayList
中删除。为什么?
最佳答案
当您删除第一个“Meg”时,索引 i=2
。然后它递增,但由于“Meg”之一已被删除,现在 name.get(3)
是“Brain”。所以你实际上并没有检查第二个“Meg”。
解决问题。您可以在删除元素时递减索引:
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);
}
}
关于java - ArrayList.remove 不在循环中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19461632/