List在迭代过程中如何进行增删改查 ListIterator知识点

/**
 *    案例: 有如下一个list集合,需求,遍历集合,当集合中等于"five"元素,那么就插入元素"four".
 *    
 *    解决问题的过程中发现:
 *  在迭代过程中,如果使用了集合的方法进行增删改查操作,那么迭代器会抛出 异常 ConcurrentModificationException.
    原因是,迭代器不知道集合中的变化,容易发生调用的不确定性. 
    解决办法: 在迭代时,不要使用集合的方法进行操作元素.可以使用迭代器的子接口ListIterator<E>
                    里面有很多操作元素的方法.而且可以正向迭代,反向迭代.
 *    
 *     记住****:该列表迭代器只有List接口有。
 *                而且这个迭代器可以完成在迭代过程中的增删改查动作。(原因:因为List集合有角标)
 
 *     列表迭代器列表ListIterator的概述:
 *    允许程序员按任一方向遍历List、迭代期间修改List,并获得迭代器在List中的当前位置。
 *    ListIterator没有当前元素;它的光标位置 始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。
 *    长度为 n 的列表的迭代器有 n+1 个可能的指针位置.
 *  
 *     具体方法用法,查看API ,Iterator 的子接口ListIterator
 
 */
public class ListIteratorDemo {

    public static void main(String[] args) {
        List list = new ArrayList();

        list.add("one");
        list.add("two");
        list.add("three");
        list.add("five");

        /*for(Iterator it = list.iterator(); it.hasNext();){
            Object obj = it.next();
            if(obj.equals("five")){

                 在迭代过程中,如果使用了集合的方法进行增删改查操作,那么迭代器会抛出异常.
                 原因是,迭代器不知道集合中的变化,容易发生调用的不确定性.
                 解决办法: 在迭代时,不要使用集合的方法进行操作元素.
                          可以使用迭代器的子接口ListIterator<E>中的方法就可以.
                          里面有很多操作元素的方法.而且可以正向迭代,反向迭代.
                 * 
                //list.add("four");    
                // 异常 ConcurrentModificationException
            }
            System.out.println(obj);
        }*/

        //用ListIterator重新解决问题
        for(ListIterator it = list.listIterator(); it.hasNext();){
            Object obj = it.next();
            if("three".equals(obj)){
                it.add("four");    //[one, two, three, four, five]
//                it.set("3");    //[one, two, 3, five]
                //对比输出结果
            }
        }
        System.out.println(list);
    }
}

 

转载于:https://www.cnblogs.com/zyjcxc/p/5452927.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值