android - 在java中使用集合时如何避免并发修改异常

标签 android

下面代码如何避免并发修改异常? BeanList 是 Bean 对象的列表

Bean bean = BeanList.get(0);
List<Bean> tempList = BeanList.subList(1, BeanList.size());
Collections.sort(tempList);
tempList.add(0, bean);
BeanList.clear();
BeanList.addAll(tempList);

最佳答案

作为 future 的引用。尝试将您的问题简化为最小的编译示例。它使我们的工作更轻松。描述问题中的所有数据类型。这里我们要猜测你的BeanList的数据类型是什么。还要遵守 Java 命名约定。类名以大写字母开头。成员变量以小写字母开头(即 beanList 而不是 BeanList)。格式不正确的代码对于我们这些您需要帮助的人来说很难阅读。提供堆栈跟踪并说明代码中的哪一行导致了异常。

您的问题不在 Bean 类或同步中。

您的问题在于您对子列表的操作方式。

List.subList() 并没有真正创建一个新列表。它在现有列表中创建一个“ View ”,并与原始列表共享数据结构。当您清除原始列表的内容时,您也会清除子列表的内容,然后当您尝试访问子列表(其数据已更改)时,您会遇到异常。

创建一个新列表,向其中添加子列表中的所有元素。

    List<Bean> tempList = new ArrayList<Bean>();
    tempList.addAll(list.subList(1, list.size()));

关于android - 在java中使用集合时如何避免并发修改异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8180611/

相关文章:

android - DataBaseHelper,是否单例?

android - 音频框架 : stream, 策略、设备

使用 GCM 的 Android 聊天应用

android - 最轻量级的容器 View 组

android - setClickable() 被 onClickListener 阻挠

android - 我如何告诉 Jenkins 在构建之间保留 Android SDK?

android - 通过 android studio 安装的应用程序未显示在启动器中

android - 每日闹钟问题,Calendar.DATE和Calendar.DAYS_OF_MONTH的区别

android - 使用 javacv 时 Eclipse 显示 OpenCV cvCvtColor 错误

java - 如何在Android中解析JSON数组(不是Json对象)