如何避免以下代码中的并发修改异常? 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);
答案 0 :(得分:5)
作为未来参考。尝试将您的问题减少到最小的编译示例。它使我们的工作更轻松。在您的问题中描述您的所有数据类型。这里我们要猜测BeanList的数据类型是什么。还遵守Java命名约定。班级名称以大写字母开头。成员变量以小写字母开头(即beanList而不是BeanList)。格式错误的代码对我们来说很难,你想要帮助的人,阅读。提供堆栈跟踪并告知代码中的哪一行会导致异常。
您的问题不在Bean类或同步中。
您的问题与您在子列表中的操作方式有关。
List.subList()实际上并没有创建新列表。它在现有列表中创建“视图”,并与原始列表共享数据结构。当您清除原始列表的内容时,您还清除子列表的内容,然后当您尝试访问子列表(其数据已更改)时,您将获得异常。
创建一个新列表,您可以从子列表中添加所有元素。
List<Bean> tempList = new ArrayList<Bean>();
tempList.addAll(list.subList(1, list.size()));
答案 1 :(得分:0)
您可以使用番石榴。
首先,导入:
api'com.google.guava:guava:26.0-android
然后使用下面的代码:
Collections2.orderedPermutations(userList, new Comparator<BrandMenuHeaderModel>() {
@Override
public int compare(UserModel m1, UserModel cm) {
return m1.getName() - m2.getName();
}
});