Iterator接口

本文通过实例展示了如何使用Java Iterator遍历ArrayList,并深入讲解了Collection与数组的区别、迭代器的使用注意事项以及遍历过程中删除元素的问题。重点讨论了集合操作与数组的不同、迭代器的单次使用和并发修改错误。

1、API介绍
在这里插入图片描述


import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Demo5_Iterator {
    public static void main(String[] args) {
        Collection col = new ArrayList();
        col.add(1);
        col.add(2.3);
        col.add('b');
        col.add("nba");
        col.add(true);
        col.add(new Object());

       
        //.hasNext() 判断集合中是否存在下个元素,如果存在返回true,否则返回false
//        if(iterator.hasNext()) {
//            next = iterator.next();
//            System.out.println(next);
//        }
//        if(iterator.hasNext()) {
//            next = iterator.next();
//            System.out.println(next);
//        }
//        if(iterator.hasNext()) {
//            next = iterator.next();
//            System.out.println(next);
//        }
//        if(iterator.hasNext()) {
//            next = iterator.next();
//            System.out.println(next);
//        }
//        if(iterator.hasNext()) {
//            next = iterator.next();
//            System.out.println(next);
//        }
//        if(iterator.hasNext()) {
//            next = iterator.next();//最后一个元素
//            System.out.println(next);
//        }
        Iterator iterator = col.iterator();
        //.next() 读取下一个元素,返回该元素对象
        Object next = null;
        //1、while结构结合迭代器实现遍历集合
        while (iterator.hasNext()) {
            next = iterator.next();//java.util.NoSuchElementException 没有如此之多元素错误/异常
            System.out.println(next);
        }

        //2、for结构结合迭代器实现遍历集合
        for (Iterator iterator1 = col.iterator(); iterator1.hasNext(); ) {
            Object next1 = iterator1.next();
            System.out.println(next1);
        }
    }
}

在这里插入图片描述

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Demo5_Iterator {
    public static void main(String[] args) {
        Collection col = new ArrayList();
        col.add(1);
        col.add(2.3);
        col.add('b');
        col.add("nba");
        col.add(true);
        col.add(new Object());

        for (Iterator iterator1 = col.iterator(); iterator1.hasNext(); ) {
            Object next1 = iterator1.next();
            //.remove() 删除集合中元素,注意必须与.next()结合使用。
            iterator1.remove();
            //System.out.println(next1);
        }
        System.out.println(col);
    }
}

2、常见问题

//1、Collection集合与数组相同与区别
//相同之处:集合与数组都能存储多个元素
Object[] obj = new Object[6];
obj[0] = 1;
obj[1] = 2.3;
obj[2] = 'b';
obj[3] = "nba";
obj[4] = true;
obj[5] = new Object();
//obj[6] = 123;//数组越界
System.out.println(Arrays.toString(obj));
//区别1:数组的长度是固定,集合的长度可变。
//区别2:数组中元素没有动态管理,集合可以动态管理元素
obj[2] = null;
System.out.println(Arrays.toString(obj));

Collection col = new ArrayList();
col.add(1);
col.add(2.3);
col.add('b');
col.add("nba");
col.add(true);
col.add(new Object());
col.remove(1);
System.out.println(col);
//结论:开发中使用集合比数组多。


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

public class Demo5_Iterator {
    public static void main(String[] args) {
        //常见问题
        //2、一个迭代器只能迭代一次
        Collection col = new ArrayList();
        col.add(1);
        col.add(2.3);
        col.add('b');
        col.add("nba");
        col.add(true);
        col.add(new Object());

        Iterator iterator = col.iterator();
        Object next = null;
        while (iterator.hasNext()) {
            next = iterator.next();
            System.out.println(next);
        }

        //如需重复遍历集合,需要重新迭代器
        iterator = col.iterator();
        while (iterator.hasNext()) {
            next = iterator.next();
            System.out.println(next);
        }
    }
}

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

public class Demo5_Iterator {
    public static void main(String[] args) {
        //常见问题
        //3、遍历过程删除元素只能使用迭代器的remove()实现,不能使用集合中remove()方法实现
        //起因:迭代器中包含了集合中元素信息如多少个,每个元素类型等等。在遍历过程,调用集合删除方法删除后,由于迭代器中数据没有同步修改
        //导致读取时失败,出现兵法修改错误。>>>不能使用集合中remove()方法实现
        Collection col = new ArrayList();
        col.add(1);
        col.add(2.3);
        col.add('b');
        col.add("nba");
        col.add(true);
        col.add(new Object());

        for (Iterator iterator1 = col.iterator(); iterator1.hasNext(); ) {
            Object next1 = iterator1.next();//java.util.ConcurrentModificationException 并发修改错误/异常
            //iterator1.remove();
            //col.remove('b');
            if (next1 instanceof Character) {
                Character c = (Character) next1;
                if (c == 'b') {
                    iterator1.remove();
                }
            }
        }
        System.out.println(col);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值