我有非常简单的代码:
List<String> list = new ArrayList<String>();
String a = "a";
String b = "b";
String c = "c";
String d = "d";
list.add(a);
list.add(b);
list.add(c);
List<String> backedList = list.subList(0, 2);
list.add(0, d);
System.out.println("2b: " + backedList);
我通过 list.add(0, d) 得到 ConcurrentModificationException 异常。所以总的来说,是因为sublist()。我很困惑,因为在 sublist() 的情况下,文档说:
返回的列表由该列表支持,因此非结构性更改
返回的列表反映在该列表中,并且反之亦然.
你能解释一下问题在哪里吗?
The subList
是原始列表的简单视图(参见here http://docs.oracle.com/javase/6/docs/api/java/util/List.html#subList%28int,%20int%29)。您可以更改其中的元素,但不能更改列表的结构。
根据文档,subList
如果您尝试进行结构性更改,则行为是不确定的。我想在这个特定的实现中,ConcurrentModificationException
被判定为未定义的行为。
如果支持列表(即此列表)以除返回列表之外的任何方式进行结构修改,则此方法返回的列表的语义将变得不确定。 (结构修改是那些改变此列表的大小的修改,或者以其他方式扰乱它,以致正在进行的迭代可能会产生不正确的结果。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)