java - ArrayList.remove 不在循环中工作

标签 java arraylist

我有以下代码-

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/

相关文章:

java - 我无法从列表中检索数组值

java - 更新 JComboBox

java - 我如何将这个 for every 转换为 for 循环?

JavaFX:使用 -splash 选项启动时 useSystemMenuBar 出现问题

java - 从 VCS checkout 后应用 API 更改作为重构(最好在 IntelliJ 平台内)

java - 支持按索引和键排序、插入和查找的集合/映射

java - ArrayList 输出错误

java - 从数组列表中提取组合字符串

java - 如何远程调试Android应用程序?

java - 使用Java的GPRS应用程序