import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/**
* ConcurrentModificationException: 在迭代器迭代集合的过程中向集合中添加元素时, 发生了异常(并发修改异常)
*
* Iterator和ListIterator的联系与区别
* 联系:
* Iterator是ListIterator的父接口: public interface ListIterator<E> extends Iterator<E> {}
* 区别:
* 1. Iterator给所有的Collection使用, ListIterator只能在List及其实现类中使用
* 2. Iterator中只有三个方法: hasNext, next和remove; ListIterator中提供了其他的很多方法, 功能较多
* 3. Iterator只能对集合进行正序遍历, ListIterator可以正序和逆序遍历集合
* 4. Iterator只能实现删除元素的功能, 在修改元素的时候, 可能会发生并发修改异常; ListIterator可以实现在遍历集合的同时进行增删改操作, 不会发生异常
* 5. Iterator中不能获取元素的索引, ListIterator中可以获取前后索引
*/
public class TestIterator {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(23);
list.add(45);
list.add(78);
list.add(83);
list.add(60);
System.out.println(list);
ListIterator<Integer> lit = list.listIterator();
//正序遍历
while(lit.hasNext()){
System.out.println("上一个索引:" + lit.previousIndex());
System.out.println("下一个索引:" + lit.nextIndex());
Integer num = lit.next();
if(45 == num){
//删除
//lit.remove();
//修改
lit.set(54);
}
//添加
lit.add(0);
System.out.println(num);
}
System.out.println("==========================");
//逆序遍历
while(lit.hasPrevious()){
Integer num = lit.previous();
if(0 == num){
lit.remove();
}
System.out.println(num);
}
System.out.println(list);
}
}