iterator & iterable

一、

java.lang.Iterable
java.util.Iterator

Iterator是迭代器类,而Iterable是接口。

好多类都实现了Iterable接口,这样对象就可以调用iterator()方法。

一般都是结合着用,比如

HashMap类就实现了Iterable接口,而要访问或打印出Map中所有内容时,就可以这样: HashMap hashMap;

Iterator iter = hashMap.iterator();

while(iter.hashNext()) {

String s = iter.next();

}

二、为什么一定要实现Iterable接口,为什么不直接实现Iterator接口呢?

看一下JDK中的集合类,比如List一族或者Set一族,都是实现了Iterable接口,但并不直接实现Iterator接口。

仔细想一下这么做是有道理的。

1、因为Iterator接口的核心方法next()或者hasNext() 是依赖于迭代器的当前迭代位置的。

如果Collection直接实现Iterator接口,势必导致集合对象中包含当前迭代位置的数据(指针)。

当集合在不同方法间被传递时,由于当前迭代位置不可预置,那么next()方法的结果会变成不可预知。

除非再为Iterator接口添加一个reset()方法,用来重置当前迭代位置。

但即时这样,Collection也只能同时存在一个当前迭代位置。

而Iterable则不然,每次调用都会返回一个从头开始计数的迭代器。

多个迭代器是互不干扰的。

2、使对象能够通过foreach 来遍历。

时间: 2024-08-08 13:54:12

iterator & iterable的相关文章

浅谈Iterator iterable

首先附上这两个接口JDK中的定义: package java.lang; import java.lang public interface Iterable<T> {    Iterator<T> iterator(); } package java.util; public interface Iterator<E> {    boolean hasNext();    E next();    void remove(); }    首先你会看到这两个接口在不同的

模块导入from collections import Iterator,Iterable失败

1.引入模块报错 from collections import Iterator,Iterable 报错: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working from collections import Iterator,Iterable 2.修改为

java Iterator Iterable Collection AbstractCollection Map关系

java.lang Interface Iterable<T>  实现该接口就可以使用for-each循环. java.util Interface Iterator<E>  用于遍历Collection,有hasNext(),next(),remove()方法. java.util Interface Collection<E>  整个Collection体系中的根接口,父类接口是Iterable.可以生成Iterator. java.util Interface M

Java 集合:迭代器(Iterator, Iterable)

Iterator接口 public interface Iterator<E> { boolean hasNext(); E next(); void remove(); } 访问元素前需要使用hasNext进行判断是否有元素存在,如果有再通过next操作获取,直接使用next操作而不进行hasNext检测,当到达末尾时会抛出NoSuchElement异常 Iterator的remove操作 好久没有看JDK代码了,今天翻看Java Core看到迭代器里面的注意点,居然一点都回忆不起来了.先看

java.util之Iterable与Iterator

package java.lang; import java.util.Iterator; public interface Iterable<T> { Iterator<T> iterator();} Iterable位于java.lang包中,它持有一个Iterator引用 package java.util; public interface Iterator<E> { boolean hasNext(); E next(); void remove();} It

JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序

前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和ArrayList.HashSet.LinkedList等等.根据核心框架图,相信我们都已经对Collection这个JavaSE中最常用API之一有一个较为全面的认识. 这个学习过程,还可以推及到其他常用开源框架和公司项目的学习和熟悉上面.借助开发工具或说明文档,先是对项目整体有一个宏观的认识,再根

es6 javascript的Iterator 和 for...of 循环

1 Iterator( 遍历器) 的概念 JavaScript 原有的表示" 集合" 的数据结构, 主要是数组( Array) 和对象( Object), ES6 又添加了 Map 和 Set. 这样就有了四种数据集合, 用户还可以组合使用它们, 定义自己的数据结构, 比如数组的成员是 Map, Map 的成员是对象. 这样就需要一种统一的接口机制, 来处理所有不同的数据结构. 遍历器( Iterator) 就是这样一种机制. 它是一种接口, 为各种不同的数据结构提供统一的访问机制.

python——聊聊iterable,sequence和iterators

想必Python的老鸟们对于Python里的iterable,sequence和iterators应该非常了解,且能做到运用自如. 但是对于刚刚开始学习Python的新手们来说,这三个玩意儿估计够让他们抓狂的.先看一段有趣的代码: >>> l = ['a', 'b', 'c'] >>> l_iter = l.__iter__() >>> l ['a', 'b', 'c'] >>> l_iter <list_iterator ob

python学习--如何实现可迭代对象(itearable)和迭代器(iterator)

关于可迭代对象Iterable 和迭代器对象iterator 可迭代对象:可以直接作用于for循环的对象统称为可迭代对象:Iterable. 可迭代对象包含一个__iter__方法,或__getitem__方法,其中__iter__方法会返回一个迭代器iterator. 可迭代对象一类是集合数据类型,如list,tuple ,dict, set,str,  另一类可迭代对象是生成器generator. 迭代器对象:可以作用于next()函数的对象都是迭代器对象.迭代器对象必须实现__next__