List中的ListIterator迭代器和for循环【松思园】

对于 java 中 list 集合的遍历是我们开发中很长见到的操作,平时用的较多的有迭代器的方式或者是通过for循环遍历,那这两者有怎样的区别呢?

在对list进行遍历输出时效果是一样的,都能有效的输出 list 中的元素,但是看起来 for 循环会更简洁一些:

 List<String> list = new ArrayList<String>();
       for (int i = 0; i < 20; i++) {
           list.add(i + "==list");
       }
//        1.for循环遍历 list
       for (String object : list) {
           System.out.print(object);
       }
//        2.迭代器遍历 list
       ListIterator iterator = list.listIterator();
       while (iterator.hasNext()) {
           System.out.print(iterator.next());
       }

但是在丢List 进行remove操作时,要注意:

for循环在删除元素时,会改变你 list.size() 的大小,因此会导致错误,一般解决办法是将需要留下的list元素,放到一个新的 list中,作为遍历删除的结果。
而通过迭代器的方式,进行 remove() 操作不仅会删除元素,还会对 list 集合的下标进行重新维护,因此,在删除操作时建议使用这种方式。

        // 通过for 循环remove元素,会报ConcurrentModificationException 错误
        for (String object : list) {
            if (object.length() > 7) {
                list.remove(object);
            }
        }
//        通过迭代器的遍历删除
        ListIterator iterator = list.listIterator();
        while (iterator.hasNext()) {
            String object = String.valueOf(iterator.next());
            if (object.length() > 7) {
                iterator.remove();
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值