我偶然发现了这个奇怪的错误。似乎Collections.sort()
不会以在迭代同一列表时能够检测并发修改的方式修改排序列表。示例代码:
List<Integer> my_list = new ArrayList<Integer>();
my_list.add(2);
my_list.add(1);
for (Integer num : my_list) {
/*
* print list
*/
StringBuilder sb = new StringBuilder();
for (Integer i : my_list)
sb.append(i).append(",");
System.out.println("List: " + sb.toString());
/*
* sort list
*/
System.out.println("CurrentElement: " + num);
Collections.sort(my_list);
}
输出
List: 2,1,
CurrentElement: 2
List: 1,2,
CurrentElement: 2
人们会期望 a ConcurrentModificationException
,但它没有被提出,并且代码可以正常工作,尽管它不应该。