加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:03:59 所属栏目:Java 来源:网络整理
导读:我正在遭遇这个例外.我的代码有什么问题? 我只想在另一个ArrayList中分离Person的重复名称 public class GlennTestMain{ static ArrayListPerson ps; static ArrayListPerson duplicates; public static void main(String[] args) { ps = new ArrayListGlen
我正在遭遇这个例外.我的代码有什么问题?
我只想在另一个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.虽然它有时会起作用,但并不能保证每次都能正常工作.

如果要添加或删除列表中的内容,则需要使用Iterator或ListIterator作为列表.并使用ListIterator#add方法在列表中添加任何内容.即使在你的迭代器中,如果你尝试使用List.add或List.remove,你也会得到那个例外,因为这没有任何区别.您应该使用迭代器的方法.

请参阅这些帖子以了解如何使用它: –

> Java : ConcurrentModificationException while iterating over list
> Iterating through a Collection,avoiding ConcurrentModificationException when removing in loop

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读