Java ConcurrentModificationException是否使用子列表?

Java ConcurrentModificationException是否使用子列表?,java,android,android-activity,android-recyclerview,Java,Android,Android Activity,Android Recyclerview,我有一个定期的回收站 我的RecyclerView有一个侦听器接口,活动在该接口上侦听。单击RecyclerView中的项目时,将调用“onItemClick()”事件 调用此事件时,我需要从RecyclerView中删除接下来的5项,并将它们添加到Map(Map)。如果再次单击RecyclerView中的同一项,我希望将这5项重新添加到RecyclerView中 下面是我的代码在活动中的样子(注意,我删除了所有不相关的代码,如onCreate()方法等): 为什么我会犯这个错误?如何修复它?在

我有一个定期的回收站

我的RecyclerView有一个侦听器接口,活动在该接口上侦听。单击RecyclerView中的项目时,将调用“onItemClick()”事件

调用此事件时,我需要从RecyclerView中删除接下来的5项,并将它们添加到
Map
Map
)。如果再次单击RecyclerView中的同一项,我希望将这5项重新添加到RecyclerView中

下面是我的代码在活动中的样子(注意,我删除了所有不相关的代码,如
onCreate()
方法等):

为什么我会犯这个错误?如何修复它?

在您的数据中。addAll(position,fiveItems)方法在内部使用Object[]a=c。toArray()方法使用迭代器it=Iterator();。当您使用迭代器时,如果其他人更改了相同的列表,那么modCount将更改,从而导致异常。因此,您需要找出导致异常的代码

来自java api的toArray()源代码

Object[] r = new Object[size()];
        Iterator<E> it = iterator();
        for (int i = 0; i < r.length; i++) {
            if (! it.hasNext()) // fewer elements than expected
                return Arrays.copyOf(r, i);
            r[i] = it.next();
        }
        return it.hasNext() ? finishToArray(r, it) : r;
Object[]r=新对象[size()];
迭代器it=迭代器();
对于(int i=0;i
您是否阅读了子列表文档?如果支持列表(即,此列表)以任何方式(而不是通过返回的列表)进行结构修改,则此方法返回的列表的语义将变得未定义。(结构修改是指更改此列表的大小,或以其他方式干扰此列表,使正在进行的迭代可能产生不正确的结果。)换句话说,如果您使用子列表,则不应修改它(数据列表)。为了从列表中获取下一个5项,除了子列表,我还可以使用什么?
06-FATAL EXCEPTION: main
java.util.ConcurrentModificationException
    at java.util.ArrayList$SubList.size(ArrayList.java:1028)
    at java.util.AbstractCollection.toArray(AbstractCollection.java:136)
    at java.util.ArrayList.addAll(ArrayList.java:589)
    at com.my.package.activity.MainActivity.onItemClicked(MainActivity.java:238)
    at com.my.package.adapter.MyAdapter$ViewHolderItem.onClick(MyAdapter.java:235)
    at android.view.View.performClick(View.java:5637)
    at android.view.View$PerformClick.run(View.java:22429)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6119)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Object[] r = new Object[size()];
        Iterator<E> it = iterator();
        for (int i = 0; i < r.length; i++) {
            if (! it.hasNext()) // fewer elements than expected
                return Arrays.copyOf(r, i);
            r[i] = it.next();
        }
        return it.hasNext() ? finishToArray(r, it) : r;