集合遍历的方式(迭代器和增强for)

集合遍历的方式

Iterator迭代器

2.1 Iterator接口

Iterator接口对数组进行遍历

在程序开发中,经常需要遍历集合中的所有元素。针对需求,JDK专门提供了一个接口java.util.Iterator.Iterator接口也是java结合中的一员。

Collection接口与Map接口主要用于储存元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器

java.util.Iterator接口:迭代器(对接口进行遍历)

有两个常用方法

boolean hasNext() 如果仍有元素可以迭代,则返回 true

​ 就是判断集合中还有没有下一个元素,有就返回 true ,没有就返回false

E next() 返回迭代的下一个元素

​ --> 取出集合中的下一个元素。

Iterator迭代器,是一个接口,无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊。

Collection接口中有一个方法,叫iterator(),这个方法返回的就是迭代器得到实现类对象

​ Iterator iterator() 返回在此 collection 集合的元素上进行迭代的迭代器

使用步骤(重点)

  1. 使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)。

    注意:

    ​ Iterator 接口中也是有泛型的,迭代器的泛型和集合的一致。

  2. 使用Iterator接口中的方法hasNext判断还有没有下一个元素

  3. 使用Iterator接口中的方法next取出集合中的下一个元素

public class Demo02Iterator {
    public static void main(String[] args) {
        // 创建一个集合对象
        Collection<String> coll = new ArrayList<>();
        // 往集合中添加元素
        coll.add("姚明");
        coll.add("科比");
        coll.add("詹姆斯");
        coll.add("麦迪");
        coll.add("艾弗森");
        /*
        * 使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)。
        注意:
            Iterator<E> 接口中也是有泛型的,迭代器的泛型和集合的一致。
        * */
        // 多态   接口          实现类对象
        Iterator<String> it = coll.iterator();

        // 或者使用循环
        // while循环
        while (it.hasNext()) {
            String s = it.next();
            System.out.println(s);
        }
        System.out.println("-------------");
        // for 循环
        for (Iterator<String> it2 = coll.iterator(); it2.hasNext(); ) {
            String e = it2.next();
            System.out.println(e);
        }
       /* // 2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
        boolean b = it.hasNext();
        System.out.println(b);

        // 3. 使用Iterator接口中的方法next取出集合中的下一个元素
        String s = it.next();
        System.out.println(s);

        s = it.next();
        System.out.println(s);
        s = it.next();
        System.out.println(s);
        s = it.next();
        System.out.println(s);
        s = it.next();
        System.out.println(s);
        b = it.hasNext();
        System.out.println(b);
    */
    }
}

2.2 迭代器的实现原理

我们在之前案例已经完成了Iterator遍历集合的整个过程。当遍历集合时,首先通过调用t集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。

Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,为了让初学者能更好地理解迭代器的工作原理,接下来通过一个图例来演示Iterator对象迭代元素的过程:

{{uploading-image-598408.png(uploading...)}}
在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。

2.3 增强for

增强for循环:底层使用的是迭代器,使用for循环的格式简化了迭代器的书写

是JDK1.5之后出现的新特性
Collectionextends Iterable:所有的单列集合都可以使用增强for循环
public interface Iterable实现这个接口允许对象成为“foreach”语句的目标

增强for循环:用来遍历集合和数组

格式

​ For(集合/数组的数据类型 变量名 :数组名/集合名){
​ // 操作代码
​ }

它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。

练习1:遍历数组

public static void main(String[] args) {
	int[] arr = {1,2,3,5,6,9};
    // 使用增强for遍历数组
    for(int i:arr){
        // i 代表数组中的每个元素
        System.out.println(i);
    }
}


练习2:遍历集合

public static void main(String[] args) {
    	Collection<String> coll = new ArrayList<String>();
    coll.add("神婆");
    coll.add("巫女");
    coll.add("神算子");
    // 使用增强for遍历
    for(String str:coll){
        // 接收变量str代表被便利的集合元素
        System.out.println(str);
    }
}

tips: 新for循环必须有被遍历的目标。目标只能是Collection或者是数组。新式for仅仅作为遍历操作出现。

posted @ 2020-03-19 22:54  _Anke  阅读(314)  评论(0编辑  收藏  举报