gpt4 book ai didi

java - PublishResult 中的 ConcurrentModificationException - ArrayAdapter

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:05 24 4
gpt4 key购买 nike

我继承的一些源代码有时会在这一行抛出 ConcurrentModificationException:

for (String c : filteredList) {

正文:

@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
ArrayList<String> filteredList = (ArrayList<String>) results.values;
if (results != null && results.count > 0) {
clear();
for (String c : filteredList) {
add(c);
}
notifyDataSetChanged();
}
}

我应该如何防止此错误发生?

最佳答案

并发修改异常:

It is not generally permissible for one thread to modify a Collection while another thread is iterating over it...

修补程序解决方案,将克隆 ArrayList<String> ,在迭代之前:

ArrayList<String> filteredList = (ArrayList<String>) results.values.clone();

您需要考虑,如果列表很大,您将在这段时间内消耗两倍的 RAM。

顺便说一句,我会先运行验证,然后映射/克隆你的列表,切换你的前两行,作为性能改进:

@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
ArrayList<String> filteredList = (ArrayList<String>) results.values.clone();
clear();
for (String c : filteredList) {
add(c);
}
notifyDataSetChanged();
}
}

希望对您有所帮助!干杯,

关于java - PublishResult 中的 ConcurrentModificationException - ArrayAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41316886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com