gpt4 book ai didi

在列表中添加/删除子列表时出现 java.util.ConcurrentModificationException

转载 作者:行者123 更新时间:2023-12-01 17:55:53 24 4
gpt4 key购买 nike

我通过以下方式向应用程序中的 ArrayList 添加/删除项目:

public long gotoItem(int pos) {
if (pos > 0) {
List<QueueItem> mSubList = mItems.subList(0, pos);

switch (mRepeatType) {
case NO_REPEAT:
case REPEAT_SINGLE:
mPlayedItems.addAll(mSubList);

mItems.removeAll(mSubList);
break;
case REPEAT_ALL:
mItems.removeAll(mSubList);

mItems.addAll(mSubList);
break;
}
}

return (long) mItems.get(0).getItem();
}

我抛出以下异常:

> java.util.ConcurrentModificationException at java.util.AbstractList$SubAbstractList.listIterator(AbstractList.java:314)
at java.util.AbstractList$SubAbstractList.iterator(AbstractList.java:301)
at java.util.AbstractCollection.contains(AbstractCollection.java:127)
at java.util.AbstractCollection.removeAll(AbstractCollection.java:277)
at at.guger.musixs.playback.queue.Queue.gotoItem(Queue.java:135)
at at.guger.musixs.playback.MusicService.gotoPosition(MusicService.java:500)
at at.guger.musixs.playback.MusicPlayer.gotoPosition(MusicPlayer.java:138)
at at.guger.musixs.activity.MainActivity.SyncLocation(MainActivity.java:707)
at at.guger.musixs.activity.MainActivity.access$200(MainActivity.java:73)
at at.guger.musixs.activity.MainActivity$1.onServiceConnected(MainActivity.java:605)
at at.guger.musixs.playback.MusicPlayer$ServiceBinder.onServiceConnected(MusicPlayer.java:246)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1224)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1241)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5461)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

为什么会出现此错误以及如何以最简单的方式修复此错误? - 我真的必须创建一个循环,从数组列表中删除(并添加)项目吗?

谢谢!

最佳答案

SubList 实际上是原始列表顶部的 View 。在内部它仍然保留原始列表。因此,当您调用originalList.removeAll(subList)时,它实际上在内部迭代原始列表并尝试修改它。这就是为什么您会收到 ConcurrentModificationException
一个简单的解决方案是将子列表复制到新列表(简化示例):

List<QueueItem> subList = new ArrayList<>(items.subList(0, pos));
items.removeAll(subList);

关于在列表中添加/删除子列表时出现 java.util.ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44811563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com