在循環中刪除集合元素可能出現數組越界的問題,比如:
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
for (Integer item : list) {
System.out.println(item);
if (item == 1) {
list.remove(item);
}
}
正確的做法是使用迭代器:
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
Integer i = iterator.next();
System.out.println(i);
if (i == 1)
iterator.remove();
}
for (Integer i : list) {
System.out.println(i);
}
如果是 ArrayList,也可以倒序遍歷時刪除。