排序的ConcurrentModification异常 您所在的位置:网站首页 Stream排序 排序的ConcurrentModification异常

排序的ConcurrentModification异常

#排序的ConcurrentModification异常| 来源: 网络整理| 查看: 265

我写了这个小程序来排序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 实验室设备网 版权所有