Java Iterator 接口简介和简单用法.

本文详细介绍了Java中Iterator接口的功能及使用方法,解释了它如何帮助统一不同容器类型的遍历方式,并提供了一个使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Iterator 的中文意思是迭代器.  

单单从中文翻译也不易理解迭代器的意思啊,  其实Iterator是1个接口,  它的作用就是遍历容器的所有元素.


一, Iterator 接口简介

Iterator 是为了实现对java容器(collection)进行遍历功能的1个接口.

我们定义iterator (首字母小色) 是实现了Iterator 接口的1个对象.




首先iterator 实现了Iterator接口后, 相当于把1个Collection容器的所有对象, 做成1个线性表(List) . 而iterator本身于1个指针.

这个指针一开始是位于 第1个元素之前的. 如下图  


下面介绍2个Iterator接口内最主要的三个方法.


1.1 boolean hasNext();

判断iterator 内是否存在下1个元素, 如果存在返回true, 否则返回false.

注意, 这时上面的那个指针位置不变.



1.2 Object next();

返回iterator 内下1个元素, 同时上面的指针向后移动一位.

如下图:



可见, 如果不断地循环执行next()方法, 就可以遍历容器内所有的元素了.


1.3 void remove();

删除iterator 内指针的前1个元素,  前提是至少执行过1次next();  

这个方法不建议使用, 建议使用容器本身的romove方法.




二, Iterator 接口的意义

我们知道, 遍历1个ArrayList 和 Linklist 是十分容易的.  

遍历1个Tree容器也不难,  但是实现机制是完全不同.

而遍历1个Set容器就无从下手了.


所以Java 设计了Iterator这个接口,  分别让各种容器自己去重写里面的hasNext() 和 next()方法.

所以我们不用关心各种容器的遍历机制,  只要使用Iterator ,  会让人觉得各种容器的遍历方法都是一样的, 这也是java接口的重要意义.


三,  如何使用 Iterator 



但是在java的各种容器内, 例如ArrayList, HashSet等, 并没有直接实现Iterator这个接口.

所以ArrayList, HashSet容器内是没有 hasNext(), next()的方法的.


而是具有 iterator() 这个方法, 返回1个实现了Iterator 接口的 iterator 对象.

注意区别啊.


下面是1个简单例子, 遍历1个HashSet

import java.util.HashSet;
import java.util.Iterator;


class Student{
    private int id;
    private String name;

    public Student(int id, String name){
        this.id = id;
        this.name = name;
    }

    //overwrite
    public String toString(){
        return this.id + ":" + this.name;
    }

    //overwrite hashCode()
    public int hashCode(){
        return id * name.hashCode();
    }

    //overwrite equals()
    public boolean equals(Object o){
        Student s = (Student)o;
        return (s.id == this.id) && (s.name.equals(this.name));
    }

}


public class Iterator1{
    public static void f(){
        HashSet hs = new HashSet();
        hs.add(new Student(1,"Jack"));
        hs.add(new Student(2,"Bill"));
        hs.add(new Student(3,"Alice"));
        hs.add(new Student(4,"Cici"));

        Student st;
        Iterator it = hs.iterator();  //Poly
        while (it.hasNext()){
            st = (Student)(it.next());
            System.out.println(st);
        } 
    }

}


输出:
     [java] 2:Bill
     [java] 1:Jack
     [java] 4:Cici
     [java] 3:Alice
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nvd11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值