ArrayList中for循环之remove坑
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>( );
list.add("aaa");
list.add("java");
list.add("java");
list.add("java");
list.add("bbb");
//remove有坑,在for循环里面remove元素,size会变化,因此跳过下一个元素会。
/* for (int i = 0; i < list.size(); i++) {
if ("java".equals(list.get(i))) {
list.remove(i);
}
}
System.out.println(list);*/
ListIterator<String> stringListIterator = list.listIterator();
while (stringListIterator.hasNext()){
if ("java".equals(stringListIterator.next())){
// list.remove("java");
stringListIterator.remove();
}
}
System.out.println(list);
}
运行结果:
[aaa, bbb]
用for循环可以发现跳过了一个“java”,remove 并没有删除。
为避免之,建议使用listIterator,
Tip:在Iterator中移除修改会有并发修改异常。