相关疑难解决方法(0)

如何在迭代时从"ArrayList"中删除元素时避免"ConcurrentModificationException"?

我试图删除一些元素ArrayList迭代它像这样:

for (String str : myArrayList) {
    if (someCondition) {
        myArrayList.remove(str);
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,我ConcurrentModificationException试图在迭代时同时从列表中删除项目时得到一个myArrayList.有没有一些简单的解决方案来解决这个问题?

java iterator list arraylist

333
推荐指数
9
解决办法
38万
查看次数

插入ArrayList时出现java.util.ConcurrentModificationException

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

public class MyList {
    public static void main(String[] args) {
        ArrayList<String> al = new ArrayList<String>();

        al.add("S1");
        al.add("S2");
        al.add("S3");
        al.add("S4");

        Iterator<String> lir = al.iterator();

        while (lir.hasNext()) {
            System.out.println(lir.next());
        }

        al.add(2, "inserted");

        while (lir.hasNext()) {
           System.out.println(lir.next());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

特定的代码会引发错误:

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
    at java.util.ArrayList$Itr.next(Unknown Source)
    at collections.MyList.main(MyList.java:32)
Run Code Online (Sandbox Code Playgroud)

java collections

7
推荐指数
2
解决办法
2万
查看次数

java.util.ConcurrentModificationException 在列表中添加/删除子列表时发生

我正在通过以下方式在我的应用程序中向/从 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();
}
Run Code Online (Sandbox Code Playgroud)

我得到以下异常抛出:

> 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 …
Run Code Online (Sandbox Code Playgroud)

java android iterator list arraylist

1
推荐指数
1
解决办法
1574
查看次数

标签 统计

java ×3

arraylist ×2

iterator ×2

list ×2

android ×1

collections ×1