添加另一个对象时出现 java.util.ConcurrentModificationException

标签 java

我正在为这个异常而苦恼。我的代码有什么问题? 我只想在另一个 ArrayList

中分隔 Person 的重复名称
public class GlennTestMain
{

    static ArrayList<Person> ps;

    static ArrayList<Person> duplicates;
    public static void main(String[] args)
    {
        ps = new ArrayList<GlennTestMain.Person>();

        duplicates = new ArrayList<GlennTestMain.Person>();

        noDuplicate(new Person("Glenn", 123));
        noDuplicate(new Person("Glenn", 423));
        noDuplicate(new Person("Joe", 1423)); // error here


        System.out.println(ps.size());
        System.out.println(duplicates.size());
    }

    public static void noDuplicate(Person p1)
    {
        if(ps.size() != 0)
        {
            for(Person p : ps)
            {
                if(p.name.equals(p1.name))
                {
                    duplicates.add(p1);
                }
                else
                {
                    ps.add(p1);
                }
            }
        }
        else
        {
            ps.add(p1);
        }
    }

    static class Person
    {
        public Person(String n, int num)
        {
            this.name = n;
            this.age = num;
        }
        String name;
        int age;
    }



}

这是堆栈跟踪

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at hk.com.GlennTestMain.noDuplicate(GlennTestMain.java:41)
at hk.com.GlennTestMain.main(GlennTestMain.java:30)

最佳答案

您不能修改您正在迭代的集合。这可能会引发 ConcurrentModificationException。虽然它有时可能会起作用,但不能保证每次都能起作用。

如果您想在列表中添加或删除某些内容,您需要为列表使用IteratorListIterator。并使用 ListIterator#add在列表中添加任何内容的方法。即使在您的 iterator 中,如果您尝试使用 List.addList.remove,您也会得到该异常,因为那不会没有任何区别。您应该使用 iterator 的方法。

查看这些帖子以了解如何使用它:-

关于添加另一个对象时出现 java.util.ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13133688/

相关文章:

java - 模拟 Java Web 服务的最佳方式

java - 将数据传递给 Android 中的自定义 View

java - 未启用检查元素,也未启用执行

java - 正则表达式性能问题 - 亵渎过滤器

java - 记录selenium中页面的加载(打开/关闭)和搜索时间

java - 具有包含 HTML 代码的 JLabel 节点的 JTree 在展开节点时抛出异常

java - 如何使用 .jar 库编译 Java 程序

java - BigInteger 使用什么算法将整数转换为字节数组

java - 当互联网重新连接时,浏览器会在请求失败时自行发出请求

java - 用于 Java 服务器面孔的 web.xml