当我使用Default Dispatcher更新列表中的项目并对列表进行排序时,我有时会遇到java.util.ConcurrentModificationException错误。问题是我必须做两个不同的默认调度程序代码块,一个用于更新列表中的项目,另一个用于对列表中的项目进行排序。
代码:-
withContext(Dispatchers.Default) {
for (item in listOfLocation) {
val distanceInMeter = ClsGlobel.calculateDistance(
item.lat, item.lon, it.latitude, it.longitude
) * 1000
listOfLocation[listOfLocation.indexOf(item)] =
SavedLocation(item.id, item.lat, item.lon, distanceInMeter, item.areaName)
}
listOfLocation.sortBy { it.distance }
Log.e(
"tag", " Default: "
+ Thread.currentThread().name
)
}
字符串
2条答案
按热度按时间3zwtqj6y1#
java.util.concurrentmodificationexception在Java中是一个错误。当迭代器遍历一个列表,并且在遍历过程中使用了一个命令来改变元素的值时,就会发生错误
似乎你的listOfLocation太大了。而你却在它还在进行的时候就把它分类
尝试这样的事情。asSequence
字符串
为什么要使用Default Dispatcher?使用IO
ddrv8njm2#
这与协程或线程无关。您正在修改列表,同时使用其迭代器对其进行迭代(“并发修改”),这是不允许的。在使用List的Iterator的for循环中迭代List时,不能对List进行变异。
因此,将其更改为不使用List的迭代器。更改此项:
字符串
至
型
时间复杂度:O(n)= O(n)