Java 中那些绕不开的内置接口 -- Iterator 和 Iterable

Java 的 Iterable 接口用来表示可迭代对象的集合,这意味着,实现 了 Iterable 接口的类可以迭代其元素。Java 里还有一个 Iterator 接口表示迭代器,迭代其实我们也可以简单地理解为遍历,是一个标准化遍历各类 Collection 容器里面的所有对象的接口。Java 的 Iterator 接口相当于是从语言本身支持迭代器这种设计模式,在文中介绍 Iterator 接口前,我们会先介绍一下迭代器设计模式的思想,以及使用这种设计模式能获得的收益。

Iterator 和 Iterable 这两个接口在命名上相似,新手学习时容易混淆,所以在这里把两者展开,梳理明白。本文大纲如下:

为避免混淆,Collection 和 集合指的是同类,而另外一个可以翻译成集合的Set 数据结构文中会直接用Set表示。

Iterator 接口

Iterator 接口的全限定名是 java.util.Iterator ,我们前面学习的 Java 集合框架里的各种容器也是 Iterator 接口的实现。java.util.Iterator和它的实现类是 Java 语言内置提供的对迭代器模式的支持,这里我们先花点篇幅了解一下,到底什么是迭代器模式。

迭代器模式

迭代器模式用于遍历集合中的对象,很多语言里都内置了这种设计模式,迭代器模式的思想是将集合对象的遍历操作从集合类中拆分出来,放到迭代器实现类中,让两者的职责更单一。

迭代器模式属于 GoF 总结的 23 种设计模式中的行为型模式。在这种模式中,集合结构会提供一个迭代器。通过这个迭代器可以顺序遍历集合中的每个元素而不需要暴露其具体的实现。其结构,可以用下面这个 UML 类图表示: [图片上传失败…(image-907ff1-1667526104423)]

  • Iterator 接口: 这个接口会定义一些基础的操作函数,如hasNext()getNext()等。通过名称就可以看出,这些方法可以帮助我们执行遍历集合、重启迭代等操作。
  • Collection 接口: 这个接口代表了要被遍历的集合。在这个接口里定义了一个createIterator方法,该方法会返回一个Iterator的实例。
  • Concrete Iterator: Iterator接口的具体实现类。
  • Concrete Collection: Collection接口的具体实现类。

上面这个迭代器模式的结构中的各个角色映射到 Java 内置为我们提供的迭代器模式实现中来的话,iterator接口就是一会儿要说到的java.util.iterator接口,它定义了模式中迭代器的行为规范;collection接口就是我们前面学过了集合框架的顶层接口java.util.collection; Concrete Iterator 和Concrete Collection即两个顶层接口的实现类则对应于前面几节学过的集合框架中的List, Set这些实现类,当然初次之外,我们在 Java 里也可以根据自己的需求,自己实现java.util.iterator接口,来提供迭代器的自定义实现类。

了解完迭代器模式后,接下来我们看看java.util.iterator接口。

Java提供的迭代器接口

要使用 Iterator 遍历元素,必须从要迭代的 Collection 对象中获取一个 Iterator 实例。获得的 Iterator 会跟踪底层 Collection 中的元素,以确保能正确遍历所有元素。如果在迭代器 Iterator 在迭代的过程中,代码对其指向的底层 Collection 进行了修改,Iterator 通常会检测到,并

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值