排序的ConcurrentModification异常 | 您所在的位置:网站首页 › Stream排序 › 排序的ConcurrentModification异常 |
我写了这个小程序来排序arrays.根据我的理解,它应该打印0,1,2. 但是,当我运行这个程序时,我得到了 ConcurrentModificationException public class Test { public static void main(String[] args) { List l1 = new ArrayList(Arrays.asList(2., 0., 1.)); List l2 = l1.subList(0, 3); Collections.sort(l1); System.out.println(l2.get(0)); } }我真的不确定这个例外的根本原因. 有人可以帮我理解我犯错的地方吗? 注意:这个问题在JAVA 7上不存在,如果有人也说JAVA 8中的原因而不是JAVA 7那就太棒了 1> Jesper..: API文档List.subList说: 如果支持列表(即此列表)在结构上以除返回列表之外的任何方式进行修改,则此方法返回的列表的语义将变为未定义.(结构修改是那些改变了这个列表的大小,或以其他方式扰乱它的方式,正在进行的迭代可能会产生不正确的结果.) 排序确实会改变列表,使得正在进行的迭代会导致不正确的结果.API文档说在这种情况下发生的事情是未定义的 - 实际上这意味着ConcurrentModificationException抛出a(至少在使用Java 8时),如代码所示. |
CopyRight 2018-2019 实验室设备网 版权所有 |