Iterator迭代器

你猜 阅读:188 2022-06-06 14:06:36 评论:0

Iterator迭代器

Iterator接口

在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口java.util.IteratorIterator接口也是Java集合中的一员,但它与CollectionMap接口有所不同,Collection接口和Map接口主要用于存储元素,而Iterator主要用于迭代访问(遍历)Collection中的元素,因此Iterator对象也被称为迭代器。

想要遍历Collection集合,那么就要获取该集合迭代器完成迭代操作,下面介绍一下获取迭代器的方法:

  • public Iterator iterator():获取集合对应的迭代器,用来遍历集合中的元素。

下面介绍下迭代的概念:

  • 迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,把这个元素取出来,继续再判断,如果还有就再取出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

Iterator接口的常用方法如下:

  • public E next():返回迭代的下一个元素。
  • public boolean hasNext():如果仍有元素可以迭代,则返回true

接下来我们通过案例学习如何使用Iterator迭代集合中元素:

package jihe.fanxing.demo02.Iterator; 
 
import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Iterator; 
 
/* 
    java.util.Iterator接口:迭代器(对集合进行遍历) 
    有两个常用的方法: 
        boolean hasNext()如果仍有元素可以迭代,则返回true。 
            判断集合中还有没有下一个元素,有就返回true,没有就返回false 
        E next() 返回迭代的下一个元素 
            取出集合中的下一个元素 
    Iterator迭代器是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊 
    Collection接口中有一个方法,叫iterator(),这个方法返回的就是迭代器的实现类对象 
        Iterator<E> iterator() 返回在此 collection 的元素上进行迭代的迭代器。 
 
    迭代器的使用步骤(重点): 
        1、使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态) 
        2、使用Iterator接口中的方法hasNext判断还有没有下一个元素 
        3、使用Iterator接口中的方法next取出集合中的下一个元素 
 */ 
public class Demo01Iterator {
   
     
    public static void main(String[] args) {
   
     
        //创建一个集合对象 
        Collection<String> coll = new ArrayList<>(); 
        //往集合中添加元素 
        coll.add("姚明"); 
        coll.add("科比"); 
        coll.add("麦迪"); 
        coll.add("詹姆斯"); 
        coll.add("艾弗森"); 
 
        /* 
            1、使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态) 
            注意: 
                Iterator<>接口也是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型 
         */ 
        //多态   接口           实现类对象 
        Iterator<String> it = coll.iterator(); 
 
        /* 
            发现使用迭代器取出集合元素的代码,是一个重复的过程 
            所以我们使用循环优化 
            不知道集合中有多少元素,使用while循环 
            循环结束的条件,hasNext方法返回false 
         */ 
        while(it.hasNext()){
   
     
            String e = it.next(); 
            System.out.println(e); 
        } 
 
        System.out.println("-----------------------------"); 
 
        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);//true 
        //3、使用Iterator接口中的方法next取出集合中的下一个元素 
        String s = it.next(); 
        System.out.println(s);//姚明 
 
        b = it.hasNext(); 
        System.out.println(b); 
        s = it.next(); 
        System.out.println(s); 
 
        b = it.hasNext(); 
        System.out.println(b); 
        s = it.next(); 
        System.out.println(s); 
 
        b = it.hasNext(); 
        System.out.println(b); 
        s = it.next(); 
        System.out.println(s); 
 
        b = it.hasNext(); 
        System.out.println(b); 
        s = it.next(); 
        System.out.println(s); 
 
        b = it.hasNext(); 
        System.out.println(b);//没有元素,返回false 
        s = it.next();//没有元素,再取出元素会抛出NoSuchElementException没有元素异常 
        System.out.println(s);*/ 
    } 
} 

增强for循环

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

格式:

for (元素的数据类型  变量 : Collection集合or数组){
   
     
	//操作代码 
} 

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

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

package jihe.fanxing.demo02.Iterator; 
 
import java.util.ArrayList; 
 
/* 
    增强for循环:底层使用的也是Iterator迭代器,使用for循环的格式,简化了迭代器的书写 
    是JDK1.5之后出现的新特性 
    Collection<E> extends Iterable<E>:所有的单列集合都可以使用增强for 
    public interface Iterable<T>实现这个接口允许对象成为“for each”语句的目标。 
 
    增强for循环:用来遍历集合和数组 
 
    格式: 
    for (元素的数据类型  变量 : Collection集合or数组){ 
	    //操作代码 
    } 
 */ 
public class Demo02ForEach {
   
     
    public static void main(String[] args) {
   
     
        //demo01(); 
        demo02(); 
    } 
    //使用增强for循环遍历集合 
    private static void demo02() {
   
     
        ArrayList<String> list = new ArrayList<>(); 
        list.add("aaa"); 
        list.add("bbb"); 
        list.add("ccc"); 
        list.add("ddd"); 
        for (String s:list) {
   
     
            System.out.println(s); 
        } 
    } 
 
    //使用增强for循环遍历数组 
    public static void demo01(){
   
     
        int[] arr = {
   
    1,2,3,4,5}; 
        for (int i:arr){
   
     
            System.out.println(i); 
        } 
    } 
} 

标签:java
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

搜索
排行榜
关注我们

一个IT知识分享的公众号