当前位置: 首页 > 面试题库 >

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

公良天逸
2023-03-14
问题内容

我在这个例外上受苦。我的代码有什么问题?我只想将Person的重复名称分开ArrayList

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)

问题答案:

您无法修改collection迭代的对象。那可能会抛出一个ConcurrentModificationException。尽管有时可能会工作,但不能保证每次都能工作。

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



 类似资料:
  • 我是java新手,我正试图编写我的第一个“更大”的程序,包含几个类。我在类“CompetitionProgram”中创建了一个ArrayList并将其声明为private。 我的程序中需要这两个类(Event&ListOfEvents),这是需求之一。事件--它只是表示事件本身,比如事件名称和尝试次数(它是一个体育事件)。和ListOfEvents--它表示列表本身,并包含用于添加事件、删除事件和

  • 问题内容: 尝试添加另一个列表时抛出List.addAll 。 在循环中,我在做, 从文件中读取 supportType 。 但是第2行抛出一个,但是我无法确定为什么? 我要在列表中添加另一个列表,那么为什么不支持此操作? 问题答案: 返回一个固定大小的列表,该列表由数组支持,并且您不能向其中添加元素。 您可以创建一个可修改的列表以进行工作:

  • 而不是更改InventoryItem中的参数 我想弄清楚如何传递新产品,如上面Store类的代码块所示。

  • 本文向大家介绍Python面向对象实现一个对象调用另一个对象操作示例,包括了Python面向对象实现一个对象调用另一个对象操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python面向对象实现一个对象调用另一个对象操作。分享给大家供大家参考,具体如下: 我先总结一下python中的类的特点: 1.类中所有的方法的参数中都必须加self,并且是第一个参数 2.__init__方法用

  • 我已经在我的应用程序中使用了房间数据库。现在我已经将我的项目迁移到androidX,因此依赖关系被改变了。 现在,当我添加一个表并试图运行项目时,我得到了一个多个文件的错误: 如何修复错误?

  • 如何以另一种方式从流中添加两个不同列表中的对象? 这里有一个例子