gpt4 book ai didi

java - 无法弄清楚 ConcurrentModificationException 的原因

转载 作者:行者123 更新时间:2023-11-30 08:08:51 27 4
gpt4 key购买 nike

以下方法抛出一个ConcurrentModificationException:

方法一(有异常(exception)):

public List getData(int n)
{
List l = new ArrayList(statement.values());
Iterator i = l.iterator();


Calculation calculation = null;

while (i.hasNext())
{
calculation = (Calculation)i.next();
if (!calculation.total.hasScores())
i.remove();
}
Collections.sort(l);
int size = l.size();

return l.subList(0,size > n? n : size);
}

当我将上述方法更改为:

方法二(无一异常(exception)):

public List getData(int n)
{
List l = new ArrayList(statement.values());
Iterator i = l.iterator();
Collections.sort(l);

Calculation calculation = null;

while (i.hasNext())
{
calculation = (Calculation)i.next();
if (!calculation.total.hasScores())
i.remove();
}

int size = l.size();

return l.subList(0,size > n? n : size);
}

那就没有异常(exception)了!想不通为什么?

异常跟踪:

Exception: java.util.ConcurrentModificationException java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)

完成类(class):

public class MyData 
{
private Map <Integer, Calculation> statements = new HashMap<Integer, Calculation>();

public List getListData()
{
List listData = this.getData(5);

return listData;
}

public List getData(int n)
{
List l = new ArrayList(statement.values());
Iterator i = l.iterator();

Calculation calculation = null;

while (i.hasNext())
{
calculation = (Calculation)i.next();
if (!calculation.total.hasScores())
i.remove();
}

Collections.sort(l);
int size = l.size();

return l.subList(0,size > n? n : size);
}

}

现在调用 getListData 时会发生异常。

最佳答案

由于 sort() 方法会打乱整个集合,您必须先调用 sort() 方法。之后调用 iterator()

关于java - 无法弄清楚 ConcurrentModificationException 的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32883602/

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