Jok*_*ker 3 java concurrentmodification
我写了这个小程序来排序arrays.根据我的理解,它应该打印0,1,2.
但是,当我运行这个程序时,我得到了 ConcurrentModificationException
public class Test {
public static void main(String[] args) {
List<Double> l1 = new ArrayList<Double>(Arrays.asList(2., 0., 1.));
List<Double> l2 = l1.subList(0, 3);
Collections.sort(l1);
System.out.println(l2.get(0));
}
}
Run Code Online (Sandbox Code Playgroud)
我真的不确定这个例外的根本原因.
有人可以帮我理解我犯错的地方吗?
注意:这个问题在JAVA 7上不存在,如果有人也说JAVA 8中的原因而不是JAVA 7那就太棒了
API文档List.subList说:
如果支持列表(即此列表)在结构上以除返回列表之外的任何方式进行修改,则此方法返回的列表的语义将变为未定义.(结构修改是那些改变了这个列表的大小,或以其他方式扰乱它的方式,正在进行的迭代可能会产生不正确的结果.)
排序确实会改变列表,使得正在进行的迭代会导致不正确的结果.API文档说在这种情况下发生的事情是未定义的 - 实际上这意味着ConcurrentModificationException抛出a(至少在使用Java 8时),如代码所示.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |