Iterator和ListIterator的联系与区别

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);
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值