`
perfy315
  • 浏览: 414879 次
社区版块
存档分类
最新评论

java中的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();
}

转至:http://liuyun025.iteye.com/blog/1321045
为什么一定要实现Iterable接口,为什么不直接实现Iterator接口呢?
      看一下JDK中的集合类,比如List一族或者Set一族,都是实现了Iterable接口,但并不直接实现Iterator接口。
仔细想一下这么做是有道理的。

      因为Iterator接口的核心方法next()或者hasNext() 是依赖于迭代器的当前迭代位置的。
      如果Collection直接实现Iterator接口,势必导致集合对象中包含当前迭代位置的数据(指针)。
      当集合在不同方法间被传递时,由于当前迭代位置不可预置,那么next()方法的结果会变成不可预知。
      除非再为Iterator接口添加一个reset()方法,用来重置当前迭代位置。
      但即时这样,Collection也只能同时存在一个当前迭代位置。
      而Iterable则不然,每次调用都会返回一个从头开始计数的迭代器。
      多个迭代器是互不干扰的。

分享到:
评论
5 楼 qinghuazangshui 2017-03-27  
[flash=200,200][img][list]
[*]
引用
[u][i][/i][/u]
[/list][/img][/flash]
|
 
4 楼 yangyangrenren 2016-06-26  
Iterator是迭代器类么?源码中是这样的
/**
* Implementing this interface allows an object to be the target of
* the "foreach" statement.
*
* @param <T> the type of elements returned by the iterator
*
* @since 1.5
*/
public interface Iterable<T>
3 楼 guoxin91 2015-03-22  
HashSet倒是实现了Iterator接口。

jdk api1.6中
Iterator所有已知子接口:
BeanContext, BeanContextServices, BlockingDeque<E>, BlockingQueue<E>, Collection<E>, Deque<E>, List<E>, NavigableSet<E>, Queue<E>, Set<E>, SortedSet<E>
Iterator所有已知实现类:
AbstractCollection, AbstractList, AbstractQueue, AbstractSequentialList, AbstractSet, ArrayBlockingQueue, ArrayDeque, ArrayList, AttributeList, BatchUpdateException, BeanContextServicesSupport, BeanContextSupport, ConcurrentLinkedQueue, ConcurrentSkipListSet, CopyOnWriteArrayList, CopyOnWriteArraySet, DataTruncation, DelayQueue, EnumSet, HashSet, JobStateReasons, LinkedBlockingDeque, LinkedBlockingQueue, LinkedHashSet, LinkedList, PriorityBlockingQueue, PriorityQueue, RoleList, RoleUnresolvedList, RowSetWarning, SerialException, ServiceLoader, SQLClientInfoException, SQLDataException, SQLException, SQLFeatureNotSupportedException, SQLIntegrityConstraintViolationException, SQLInvalidAuthorizationSpecException, SQLNonTransientConnectionException, SQLNonTransientException, SQLRecoverableException, SQLSyntaxErrorException, SQLTimeoutException, SQLTransactionRollbackException, SQLTransientConnectionException, SQLTransientException, SQLWarning, Stack, SyncFactoryException, SynchronousQueue, SyncProviderException, TreeSet, Vector
2 楼 zymgloria 2014-03-09  
yuanhongb 写道
HashMap类有实现Iterable接口???

一般都是结合着用,比如
HashMap类就实现了Iterable接口,而要访问或打印出Map中所有内容时,就可以这样: HashMap hashMap;
Iterator iter = hashMap.iterator();
while(iter.hashNext()) {
  String s = iter.next();
}



  HashMap不能这么遍历
1 楼 yuanhongb 2013-02-02  
HashMap类有实现Iterable接口???

一般都是结合着用,比如
HashMap类就实现了Iterable接口,而要访问或打印出Map中所有内容时,就可以这样: HashMap hashMap;
Iterator iter = hashMap.iterator();
while(iter.hashNext()) {
  String s = iter.next();
}


相关推荐

    java 中 Iterator 与Iterable的作用

    java 中 Iterator 与Iterable的作用;java语言需要更多基础沉淀,扎扎实实,后面的各种项目都会如何天翼。进行更高阶的用法和一些框架的原理都离开最基础的东西,基础虽然枯燥,但是也很有乐趣。

    java集合_浅谈Iterable和Iterator的区别

    这篇文章将深入探讨`Iterable`和`Iterator`的区别,以及它们在实际编程中的应用。 首先,`Iterator`是一个接口,它定义了遍历集合元素的基本方法,如`next()`用于获取下一个元素,`hasNext()`检查是否还有更多元素...

    Java源码分析Iterable.pdf

    Iterable接口的定义位于java.lang.Iterable接口中,它只有一个方法,即iterator(),该方法返回一个Iterator对象,该对象用于迭代对象的元素。Iterable接口的定义如下所示: ```java public interface Iterable&lt;T&gt; {...

    详解Java中Iterable与Iterator用法

    Java中Iterable与Iterator是两个非常重要的概念,它们都是Java集合框架中最基本的组件,用于遍历和迭代集合中的元素。Iterable是Java中的一个接口,表示可以被迭代的对象,而Iterator是Java中的一个迭代器对象,用于...

    自己实现java中Iterator(迭代器功能).docx

    ### 自己实现Java中的Iterator(迭代器功能) #### 背景与动机 在Java编程过程中,迭代器(`Iterator`)是一种常见的用于遍历集合元素的机制。它提供了访问集合元素的方式,而不暴露底层数据结构。对于学习或进阶...

    Java源码分析:深入探讨Iterator模式

    在Java中,集合框架通过实现`Iterable`接口并提供一个`iterator()`方法来支持迭代器模式。下面我们将深入探讨`java.util.AbstractList`类中如何实现迭代器模式。 #### 四、`java.util.AbstractList`中的迭代器实现 ...

    Iterable和Iterator的关系

    在Java编程语言中,`Iterable`和`Iterator`是两个非常重要的接口,它们在处理集合数据时起到核心作用。理解这两个接口的关系对于高效地操作Java集合框架至关重要。 首先,我们来了解一下`Iterable`接口。`Iterable`...

    一个使用iterator和json技术的实例

    在Java编程语言中,`Iterator`接口和`Iterable`接口是处理集合数据的重要工具,而JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于数据传输和存储。这个"iterator_jsonDemo"实例结合了这...

    Java学习之Iterator(迭代器)的一般用法

    在Java中,任何实现了Iterable接口的集合都可以通过调用`iterator()`方法来获取一个Iterator实例。例如,对于一个`ArrayList`列表`list`,你可以这样获取其迭代器: ```java Iterator&lt;String&gt; iterator = list....

    关于方法iterator()找不着的问题~~~~~

    在Java编程中,`iterator()`方法是集合框架中非常关键的一部分,主要用于遍历集合中的元素。当你遇到“方法iterator()找不着的问题”时,这通常意味着你在尝试使用`iterator()`时遇到了错误,可能是由于以下几个原因...

    java使用iterator遍历指定目录示例分享

    在给定的示例中,我们看到使用了`Iterator`接口和`Iterable`接口来实现这一功能。下面将详细介绍这个示例中涉及的知识点。 1. **`Iterator`接口**:`Iterator`是Java集合框架的一部分,用于遍历集合中的元素。它...

    Iterator详解

    在Java编程语言中,迭代器(Iterator)是一个至关重要的工具,它提供了一种高效且简洁的方式来遍历和访问集合中的元素,而无需暴露集合的内部结构。迭代器设计模式遵循了“访问者”模式的原则,使得代码更加灵活和可...

    java工具类 java开发助手 java util

    12. Iterator和Iterable接口:Iterator用于遍历集合元素,Iterable则是所有可迭代对象的父接口,例如for-each循环就是基于这两个接口实现的。 13. Optional类:Java 8引入的Optional类,用于表示可能不存在的值,...

    【Java设计模式】(1)迭代器模式Iterator

    迭代器模式(Iterator Pattern)是Java设计模式中的行为模式之一,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java中,迭代器模式被广泛应用于集合类,如ArrayList、LinkedList等,通过...

    Java Iterator迭代器_动力节点Java学院整理

    Java中提供了两个相关的接口:Iterator和Iterable。Iterator接口定义了迭代器的基本方法,包括hasNext()、next()和remove()。hasNext()方法用于判断是否存在下一个对象元素,next()方法用于获取下一个对象元素,...

    java.util包

    2. Iterator和Iterable接口:Iterator用于遍历集合中的元素,而Iterable接口使得类可以被for-each循环遍历。这两个接口是Java集合框架的重要组成部分,提供了访问和操作集合元素的标准方式。 3. Map接口和其实现类...

    Java Iterator(迭代器)

    Java Iterator(迭代器)是Java集合框架中不可或缺的一部分,它为遍历集合提供了一种标准的方式,特别是对于ArrayList、HashSet等实现了Iterable接口的集合类。迭代器不是集合本身,而是一个独立的对象,允许程序员...

    示例iterator使用及技巧

    在Java中,所有实现了`Iterable`接口的类(如`Collection`接口的所有实现类)都可以返回一个`Iterator`对象来遍历其内部的元素。 ##### 2. 获取`Iterator`实例 获取`Iterator`实例的方法非常简单,只需调用实现了`...

    Thinking in Java 3rd Edition 中文版(最好的版本).rar

    这些容器类为数据存储提供了丰富的选择,同时,Iterator和Iterable接口让遍历变得简单。此外,作者还介绍了泛型在集合中的应用,以及Collections类提供的各种实用方法。 《Thinking in Java》第三版还涵盖了输入/...

    Java 编程思想中文第三版(PDF)

    书中会介绍它们的用法和区别。 - 运算符:涵盖赋值、比较、逻辑、位运算等各种运算符,并讨论它们在Java中的应用。 - 控制结构:包括条件语句(if-else)、循环(for、while、do-while)以及跳转语句(break、...

Global site tag (gtag.js) - Google Analytics