-
Iterable接口与Iterator接口的困惑10
首先附上这两个接口JDK中的定义:
package java.lang;
import java.util.Iterator;
public interface Iterable<T> {
Iterator<T> iterator();
}
package java.util;
public interface Iterator<E> {
boolean hasNext();
E next();
void remove();
}
可以看到这两个接口来自于不同的package中,实现Iterable接口可以使用foreach方法来遍历。
但Iterable中只是用一个方法来返回一个Iterator类型实例,我就想:
为什么一定要去实现Iterable这个接口呢?
为什么不直接实现Iterator接口呢?
难道这仅是语言规范,或者说是什么编程模式之类的?2011年7月28日 17:16
6个答案 按时间排序 按投票排序
-
hxrs 写道为什么一定要去实现Iterable这个接口呢?
为什么不直接实现Iterator接口呢?
难道这仅是语言规范,或者说是什么编程模式之类的?
看一下JDK中的集合类,比如List一族或者Set一族,
都是实现了Iterable接口,但并不直接实现Iterator接口。
仔细想一下这么做是有道理的。因为Iterator接口的核心方法next()或者hasNext()
是依赖于迭代器的当前迭代位置的。
如果Collection直接实现Iterator接口,势必导致集合对象中包含当前迭代位置的数据(指针)。
当集合在不同方法间被传递时,由于当前迭代位置不可预置,那么next()方法的结果会变成不可预知。
除非再为Iterator接口添加一个reset()方法,用来重置当前迭代位置。
但即时这样,Collection也只能同时存在一个当前迭代位置。
而Iterable则不然,每次调用都会返回一个从头开始计数的迭代器。
多个迭代器是互不干扰的。
2011年7月28日 17:16
-
Iterable是1.5引入的新特性,Iterator是1.2就有了,二者都是为了迭代造作,Iterable只是包装了Iterator,从而允许实现此接口的对象成为foreach语句的目标,而且这样的话,更方便以后的扩展。
2011年7月28日 17:16
-
Killer+bj 写道Iterable是集合框架的超级接口!
(实现这个接口允许对象成为 "foreach" 语句的目标。 )而foreach是1.5以后的新特性吧!
事实上,Iterable 正是1.5开始引入的。
package java.lang; import java.util.Iterator; /** Implementing this interface allows an object to be the target of * the "foreach" statement. * @since 1.5 */ public interface Iterable<T> { /** * Returns an iterator over a set of elements of type T. * * @return an Iterator. */ Iterator<T> iterator(); }
2011年7月28日 17:16
-
Iterable是集合框架的超级接口!
(实现这个接口允许对象成为 "foreach" 语句的目标。 )而foreach是1.5以后的新特性吧!2011年7月28日 17:16
-
Iterable说白了就是为了可以for each。
另外记得java是强类型语言,一个类实现了Iterable,那么虚拟机就知道,你这个类可以用foreach来循环。
balabala,展开来可以讲一大堆。。。2011年7月28日 17:16
相关推荐
Iterable接口的定义位于java.lang.Iterable接口中,它只有一个方法,即iterator(),该方法返回一个Iterator对象,该对象用于迭代对象的元素。Iterable接口的定义如下所示: ```java public interface Iterable<T> {...
深入探讨Iterable与Iterator关系时,我们会发现,为什么不直接将hasNext()、next()方法放在Iterable接口中,其他类直接实现就可以了?reason是有些集合类可能不止一种遍历方式,实现了Iterable的类可以再实现多个...
在Java编程语言中,`Iterable`和`Iterator`是两个非常重要的接口,它们在处理集合数据时起到核心作用。理解这两个接口的关系对于高效地操作Java集合框架至关重要。 首先,我们来了解一下`Iterable`接口。`Iterable`...
文章目录Iterable源码分析(一)简介(二...当然,一个类如果没有实现Iterable接口,也可以通过挂载外部迭代器Iterator进行遍历。 此外,内部迭代器还可转换为可分割迭代器Spliterator,以便用于流式操作 注意区别于外
总结一下,`Iterator`是一个迭代器接口,专注于遍历集合元素,而`Iterable`是一个使类支持`for-each`循环的接口,它通过`Iterator`提供遍历功能。`Iterable`的实现比直接实现`Iterator`更灵活,更适合并发环境,并且...
关于学习过程中的随手笔记:自定义Iterable接口 定义一个可变参数 ... 可变参数注意点 1. 调用时可传可不传 2. 可变参数实际上就是一个数组 3. 可变参数位于形参列表的最后一个位置 */
在Java编程语言中,`Iterator`接口和`Iterable`接口是处理集合数据的重要工具,而JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于数据传输和存储。这个"iterator_jsonDemo"实例结合了这...
在Python编程语言中,Iterator(迭代器)和Iterable(可迭代对象)是两个非常核心的概念,它们是实现数据迭代操作的基础。理解这两个概念的区别对于掌握Python中的集合类型以及循环结构至关重要。 首先,我们来看...
java 中 Iterator 与Iterable的作用;java语言需要更多基础沉淀,扎扎实实,后面的各种项目都会如何天翼。进行更高阶的用法和一些框架的原理都离开最基础的东西,基础虽然枯燥,但是也很有乐趣。
如果你正在使用的类库版本不支持`iterator()`方法,比如你引用了一个旧版本的集合库,而这个版本并未实现`Iterable`接口,那么`iterator()`将不可用。确保你的项目依赖是最新的,并且与你的代码兼容。 2. **类型...
mesh.js, 异步iterable迭代器的实用工具库 Mesh是一个用于异步iterable迭代器的实用工具库。动机这个库最初是用来处理复杂的数据流,并统一应用程序在内部和外部的通信方式。 它还作为一个单一的单通道通道for所有...
除了`Iterator`之外,还有一个相关的接口`Iterable`。这个接口主要用于定义一个可以被迭代的对象,它提供了一个`iterator()`方法,该方法返回一个迭代器对象。 ```java public interface Iterable<T> { Iterator...
在Java中,集合框架通过实现`Iterable`接口并提供一个`iterator()`方法来支持迭代器模式。下面我们将深入探讨`java.util.AbstractList`类中如何实现迭代器模式。 #### 四、`java.util.AbstractList`中的迭代器实现 ...
`iterator()`方法是`Iterable`接口的一个方法,由`Collection`接口继承。当你调用一个集合对象的`iterator()`方法时,它会返回一个实现了`Iterator`接口的对象,这个对象可以用来遍历集合中的元素。例如: ```java...
在Java中,迭代器模式的实现通常使用`Iterable`接口和`Iterator`接口。`Iterable`接口定义了一个`iterator()`方法,返回一个`Iterator`实例。`Iterator`接口则包含`hasNext()`和`next()`方法。 ```java public ...
在Java中,所有实现了`Iterable`接口的类(如`Collection`接口的所有实现类)都可以返回一个`Iterator`对象来遍历其内部的元素。 ##### 2. 获取`Iterator`实例 获取`Iterator`实例的方法非常简单,只需调用实现了`...
Iterator接口定义了hasNext、next和remove方法,用于遍历和移除元素。fail-fast机制是Java集合框架的一个特性,当多个线程尝试修改同一集合时,如果一个线程在迭代过程中发现集合已被其他线程修改,将会抛出...
2. Iterator和Iterable接口:Iterator用于遍历集合中的元素,而Iterable接口使得类可以被for-each循环遍历。这两个接口是Java集合框架的重要组成部分,提供了访问和操作集合元素的标准方式。 3. Map接口和其实现类...
Iterable接口则提供了一个iterator()方法,用于返回一个标准的Iterator实现。这个接口的实现者可以将其用于foreach语句中,例如Collection、Deque、List、Queue、Set等。 使用Iterator的简单例子可以展示它的使用...