Javase学习记录之------集合遍历迭代器的使用

Iterator iterator();迭代器,集合的专属遍历方式;
迭代器被定义成一个接口而不是类;
各种集合的遍历方式不同,所以迭代器中的方法在具体的子类中,以内部类的方式体现
Iterator类中的iterator()就是迭代器;
使用方法iterator()要求容器返回一个Iterator。
第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承
Object next();获取元素,并移动到下一个位置;
next方法,返回的是集合的元素,而集合元素的类型可以是任意类型的,有不确定性,而为了达到代码的通用性,直接指定返回的是Object类型(返回基类)
可以使用泛型明确返回值的类型。

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

public class CollectionDemo {
    public static void main(String[] args) {
        Collection c=new ArrayList();
        c.add("hallo");
        c.add("word");
        c.add("java");
        Iterator it=c.iterator();
        //通过集合对象获得迭代器对象
        //实际返回的肯定是子类的对象,这里是多态
        //获取他的迭代器,这里就是it被赋值获得了c集合的迭代器,it就是迭代器对象了
        // Object next(),这里可能是迭代器重写了根类中的next()方法,使next()就是迭代器的方法

        Object obj=it.next();
        System.out.println(obj);
        //it.next()返回的值就是集合中的元素,给了obj并输出obj验证
        System.out.println(it.next());
        System.out.println(it.next());
        System.out.println("-----------------------------");
        //这样虽然可以输出,但是有时容易多写it.next()造成越界报错,所以我们可以改进
        //判断是否有下一个元素,有才获取,没有就不会搭理他,不会要输出,也就没用要报错

        c.add("hallo");
        c.add("word");
        c.add("java");
        it=c.iterator();
        //上面的it被集合c赋值,it就只保存了被集合c赋值的东西(hallo word java),上面用完后it里面已经没用东西了()
        //此时给集合c中添加元素c变成(hallo word java hallo word java),但并不会改变原有it中的那些东西仍是()
        //要想改变it里面的东西,必须重新赋值后it变成了(hallo word java hallo word java);
        if(it.hasNext()){
            System.out.println(it.next());
        }
        if(it.hasNext()){
            System.out.println(it.next());
        }
        if(it.hasNext()){
            System.out.println(it.next());
        }
        if(it.hasNext()){
            System.out.println(it.next());
        }
        if(it.hasNext()){
            System.out.println(it.next());
        }
        if(it.hasNext()){
            System.out.println(it.next());
        }
        System.out.println("-----------------------------");

        //最终版,用循环改进
        c.add("hallo");
        c.add("word");
        c.add("java");
        it=c.iterator();
        while(it.hasNext()){
            //System.out.println(it.next());打出的是地址值
            String s=(String)it.next();
            //我们知道他的元素是String 类型的,所以我们把他转成String类型的在输出
            System.out.println(s);
            //next()方法返回的是一个基类类型的对象,所以我们转一下,向下转型
        }

        /*如果是用for循环,就是这样的
        //(初始化条件;判断;省略)
        c.add("hallo");
        c.add("word");
        c.add("java");
        for(Iterator a=c.iterator();a.hasNext();){
            String s=(String)a.next();
            System.out.println(s);
        }
        用while的好处是看起来明朗,用for的好处是a用完就是垃圾了,但是while中的it不会变成垃圾值
         */

        /*
        当时写的时候,第二次输出总是报错
        你不是写了三种方法吗?写完第一种后,你的it里面已经没有子类的对象了,每次都要重新赋值一次
         */


        /*
        遍历集合的方法:
        1:通过集合对象获取迭代器对象
        2:通过迭代器对象获取hasNext()方法判断是否有元素
        3:通过迭代器对象的next()方法获取元素并移动到下一个位置
         */
    }
}

程序运行结果为:
hallo
word
java

hallo
word
java
hallo
word
java

hallo
word
java
hallo
word
java
hallo
word
java

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值