[英]Can't figure out the reason for ConcurrentModificationException
The following method throws a ConcurrentModificationException
: 以下方法引发
ConcurrentModificationException
:
Method 1 (With exception): 方法1(例外):
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);
}
And when I changed the above method to this: 当我将上述方法更改为:
Method 2 (Without exception): 方法2(无例外):
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);
}
Then there's no exception! 那也不例外! Cannot figure out why?
不知道为什么?
Exception trace: 异常跟踪:
Exception: java.util.ConcurrentModificationException java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
Complete 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);
}
}
Now when getListData is called exceptions occurs. 现在,调用getListData时会发生异常。
Since sort()
methos jumble up whole collection , you have to call sort()
method first. 由于
sort()
方法混杂了整个集合,因此您必须先调用sort()
方法。 After that call iterator()
. 之后,调用
iterator()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.