Java日志第31天 2020.8.5 Iterator迭代器

java.util.Interator接口是一个迭代器,可以对集合进行遍历。

有两个常用的方法:

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

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

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

  取出集合中的下一个元素

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

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

Iterator<E> iterator() 返回在此collection的元素上进行迭代的迭代器

迭代器使用步骤

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

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

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

实例:

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

public class Demo01Iterator {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();

        coll.add("迪丽热巴");
        coll.add("古力娜扎");
        coll.add("马尔扎哈");
        coll.add("撒扬娜拉");

        Iterator<String> it = coll.iterator();

        boolean b1 = it.hasNext();
        System.out.println(b1);
        String n1 = it.next();
        System.out.println(n1);

        boolean b2 = it.hasNext();
        System.out.println(b2);
        String n2 = it.next();
        System.out.println(n2);

        boolean b3 = it.hasNext();
        System.out.println(b3);
        String n3 = it.next();
        System.out.println(n3);

        boolean b4 = it.hasNext();
        System.out.println(b4);
        String n4 = it.next();
        System.out.println(n4);

        boolean b5 = it.hasNext();//false
        System.out.println(b5);
    }
}

有上述实例可看出,有很多重复代码,我们可以通过循环来优化程序。

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

public class Demo01Iterator {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();

        coll.add("迪丽热巴");
        coll.add("古力娜扎");
        coll.add("马尔扎哈");
        coll.add("撒扬娜拉");

        Iterator<String> it = coll.iterator();

        /*
        不知道循环次数
        可以考虑使用for循环
         */
        while(it.hasNext()){
            System.out.println(it.next());
        }

        System.out.println("===================");

        /*
        for循环
         */
        for(Iterator<String> it2 = coll.iterator(); it2.hasNext();){
            System.out.println(it2.next());
        }
    }
}

增强for循环

增强for循环(也称for each循环),专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

格式:

for(集合/数组的数据类型 变量名 : 结合名/数组名){

  System.out.println(变量名);

}

import java.util.ArrayList;

public class Demo01Foreach {

    public static void main(String[] args) {
        demo01();

        System.out.println("=========");
        demo02();
    }

    //数组遍历
    private static void demo01() {
        int[] arr = {1, 2, 3, 4, 5};
        for(int a : arr){
            System.out.println(a);
        }
    }
    
    //集合遍历
    private static void demo02(){
        ArrayList<String> list = new ArrayList<>();
        list.add("迪丽热巴");
        list.add("古力娜扎");
        list.add("马尔扎哈");
        
        for(String l : list){
            System.out.println(l);
        }
    }
}