Iterator和Iteratable的区别、介绍

简介: 版权声明:本文为sydMobile原创文章,转载请务必注明出处! https://blog.csdn.net/sydMobile/article/details/51916969 在java集合类库中将集合的接口与实现相分离。
版权声明:本文为sydMobile原创文章,转载请务必注明出处! https://blog.csdn.net/sydMobile/article/details/51916969

在java集合类库中将集合的接口与实现相分离。同样的接口,可以有不同类型的实现,这样就组成了多种不同的集合类型,他们都是实现了Collection接口,Map除外。

java集合类的基本接口是Collection接口,而Collection接口必须实现Iteratable接口,而不是Iterator这个接口。(具体原因就是他们的区别,下面会讲到)

Iteratable是接口,他和迭代器是紧密相连的,Iterator是迭代器,用来遍历集合的。集合类实现了Iterable接口后,Iterable有一个方法 Iterator<T> iterator(),调用这个方法就可以返回一个Iterator类型,然后就可以遍历集合了。

Map没有实现Iterable接口,而Map也就没有Iterator()这个方法,但是Map有keySet()和entryset()方法,这两个方法可以转成set,set有可以生成Iterator对象的方法。

Iterator 和Iterable的关系

Iterator内部有遍历集合的方法,Iterator是迭代器,之所以出现Iterator 是为了解决遍历集合时,从不同类型的集合类中抽象出来,从而避免我们在操作集合的时候必须要根据集合内部结构来选择我们应该如何遍历。

比如:假设没有Iterator,遍历一ArryList 的方法

for(int i=0;i<array.size();i++){

}

而如果是链表的时候必须要用While循环

while ((linkedList =linkedList.next())!=null){

}

比如别的类型的集合的时候可能还有有别的遍历方法。这样就造成了我们如果要遍历集合的时候必须要知道集合的内部结构,这样会使的遍历的代码和集合本身的耦合度很高!!在编程中我们应该尽量降低代码的耦合度,使代码方便日后管理,和适应需求变化。在JAVA中为了解决这个问题引入了Iterator,Iterator在遍历不同的集合的时候方式总是一样的。

想用Iterator来遍历集合,则这个集合通常要实现Iterable接口而不是Iterator,在Iterable中有一个非常重要的方法就是Iterator《T》iterator()方法,这个方法返回Iterator对象,然后通过这个对象进行遍历。

那么有人可能会产生疑问了,为什么我们不直接Implement Iterator 呢?

如果Collection直接实现Iterator这个接口的时候,则当我们new 一个新的对象的时候,这个对象中就包含了当前迭代位置的数据(指针),当这个对象在不同的方法或者类中传递的时候,当前传递的对象的迭代的位置是不可预知的,那么我们在调用next()方法的时候也就不知道是指到那一个元素。如果其中加上了一个reset()方法呢?用来重置当前迭代的位置这样Collection也只能同时存在一个当前迭代位置的对象。所有不能直接选择实现 Iterator。 实现Iteratable ,里面的方法Iterator() 可以在同一个对象每次调用的时候都产生一个新的Iterator对象。这样多个迭代器就不会互相干扰了。

目录
相关文章
|
4月前
|
C++ 容器
迭代器 iterator
迭代器 iterator
|
5月前
list转迭代器Iterator
list转迭代器Iterator
|
Java 索引
每日一道面试题之Iterator 和 ListIterator 有什么区别?
每日一道面试题之Iterator 和 ListIterator 有什么区别?
|
5月前
自己实现iterator迭代器
自己实现iterator迭代器
iterator接口
iterator接口
33 0
|
Java 程序员 索引
Java ListIterator 迭代器的使用(Iterator 与 ListIterator 的区别)
Java ListIterator 迭代器的使用(Iterator 与 ListIterator 的区别)
97 0
|
索引 容器
Iterator与ListIterator有什么区别
Iterator与ListIterator有什么区别
|
JavaScript 前端开发 Java
彻底理解 for of 和 Iterator
本文主要来说下ES6的Iterator,目的在于理解它的概念、作用、以及现有的应用,最后学以致用。 Iterator可以说是ES6内相当重大的一个特性,也是很多其他特性运行的基石。 为什么Iterator地位如此之高呢?
116 1
彻底理解 for of 和 Iterator
C#编程-93:迭代器Iterator概述
C#编程-93:迭代器Iterator概述
C#编程-93:迭代器Iterator概述
|
算法 搜索推荐 C++
C++迭代器 iterator详解
C++迭代器 iterator详解
350 0
C++迭代器 iterator详解