请勿在java中使用集合时避免并发修改异常

nil*_*ila 1 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);
Run Code Online (Sandbox Code Playgroud)

Tor*_*ben 5

作为未来的参考.尝试将您的问题减少到最小的编译示例.它使我们的工作更轻松.在您的问题中描述您的所有数据类型.这里我们要猜测BeanList的数据类型是什么.还遵守Java命名约定.班级名称以大写字母开头.成员变量以小写字母开头(即beanList而不是BeanList).格式错误的代码对我们来说很难,你想要帮助的人,阅读.提供堆栈跟踪并告知代码中的哪一行会导致异常.

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

您的问题与您在子列表中的操作方式有关.

List.subList()实际上并没有创建新列表.它在现有列表中创建"视图",并与原始列表共享数据结构.当您清除原始列表的内容时,您还清除子列表的内容,然后当您尝试访问子列表(其数据已更改)时,您将获得异常.

创建一个新列表,您可以从子列表中添加所有元素.

    List<Bean> tempList = new ArrayList<Bean>();
    tempList.addAll(list.subList(1, list.size()));
Run Code Online (Sandbox Code Playgroud)