/**
* 集合中的remove方法存在问题,尤其是在循环中移除元素时,会导致“跳过”元素。
*/
Integer[] array = new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List list = new ArrayList<>(Arrays.asList(array));//不使用new ArrayList会导致报错
//Exception in thread "main" java.lang.UnsupportedOperationException
// at java.util.AbstractList.remove(AbstractList.java:161)
// at Scratch.main(scratch_2.java:15)
for (int i = 0; i < list.size(); i++) {
Integer integer = list.get(i);
//本应移除元素4,但是未移除。注意remove方法会改变List的size值,若非list.size()判断可能导致下标越界
if (integer == 3 || integer == 4 || integer == 8) {
list.remove(i);
// i--;//使用i=i-1的方式,来正确遍历
}
System.out.printf("i=%2d,list size=%2d,list[i]=%2d,list=%s\n", i, list.size(), list.get(i), list);
}