我有以下代码-
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);
}
}