`
liuyun025
  • 浏览: 122595 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Iterator 和 Iterable 接口的区别

    博客分类:
  • java
阅读更多

 

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

 

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

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

 

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

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

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

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

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

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

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

分享到:
评论

相关推荐

    Iterable和Iterator的关系

    Iterator和Iterable 学习任何类和文档最标准的解释当然还是从jdk API里面学习,因为这个是最准确...java.lang包中 并且Collection继承了Iterable接口。 原创文章 3获赞 10访问量 285 关注 私信 展开阅读全文 作

    【JDK1.8源码剖析】内部迭代器 Iterable接口

    文章目录Iterable源码分析(一)简介(二...当然,一个类如果没有实现Iterable接口,也可以通过挂载外部迭代器Iterator进行遍历。 此外,内部迭代器还可转换为可分割迭代器Spliterator,以便用于流式操作 注意区别于外

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

    一个iterator_jsonDemo. 1.通过iterable接口和iterator实现迭代输出。2.通过JSONArray实现输出(自带json相关jar包)。供参考。

    【JDK1.8源码剖析】外部迭代器Iterator接口

    注意区别于内部迭代器Iterable和枚举器Enumeration 外部迭代器的设计背后体现着迭代器设计模式的思想 (二)源码分析 该接口就只有四种方法 // 是否存在未遍历元素 boolean hasNext(); // 返回下一个元素

    Last Java Collection Library:Java库与通常的Collections一起使用标量数组-开源

    该库还为仅具有Iterable接口的对象提供了诸如contains和indexOf之类的有用方法。 是的。 之所以有些愚蠢,是因为所有实现之间的区别仅在于类型之间的差异,并且此代码具有100%的隐式耦合和重复。 但是Java并没有别...

    Java 基础核心总结 +经典算法大全.rar

    -、Iterator Iterable ListIterator 二、Map 和 Collection 接口Map 集合体系详解 HashMap LinkedHashMap TreeMap WeakHashMap Hashtable Collection 集合体系详解 Set 接口 AbstractSet 抽象类SortedSet 接口...

    DuHouAn#Java#2_容器中的设计模式1

    容器中的设计模式迭代器模式Collection 继承了 Iterable 接口,其中的 iterator() 方法能够产生一个 Iterator 对象,通过这个

    超全Java集合框架讲解.md

    - Iterator Iterable ListIterator - Map 和 Collection 接口 - Map 集合体系详解 - HashMap - LinkedHashMap - TreeMap - WeakHashMap - Hashtable - Collection 集合体系详解 - Set 接口 - AbstractSet...

    带头结点的双向循环链表数据结构

    设计一个接口interface linearList,设计一个类class doubleChainNode相当于C++中的结构体,设计一个类class doubleChainjava实现了了接口linearList所有方法,以及实现迭代器接口Iterable中的一个方法Iterator<T> ...

    java-basic:java基础测试-java8

    1.核心接口:Iterator(迭代器接口)Iterable(可迭代接口) -> Collection(集合接口)-> List(列表,线性表接口) :ArrayList、LinkedList-> Set(元素不重复的集合接口):HashSet、TreeSet-> Queue(队列): ...

    ist的matlab代码-uebung08:练习08

    借助实现Iterable的容器Iterable提供的Iterator ( LinkedList , TreeSet ),您可以使用著名人物的示例来计算有关推文的统计信息。 这项任务的目的 首先,逐步将推文( String s)编入索引,以计算哪个单词出现的...

    ist的matlab代码-uebung04:练习04

    通过接口Iterable规定的方法iterator 。 为此,实现一个访问所有元素的迭代器。 确保测试用例TestSet.testStringSet正确运行。 提示 必须使用议程! 如果使用堆栈而不是列表来访问,访问顺序会有什么变化? 练习2: ...

    ES6新特性七:数组的扩充详解

    1) Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map,他们都部署了iterator接口,字符串也是)。 let arrayLike = {...

    java集合源码-jdk-collection:java集合类源码阅读

    迭代器无非是一个接口,假设我们有一个数组,如果我们要实现迭代器,只需要根据该接口定义的方法,返回对应结果而已. 如下代码,是一个简化的ArrayList 加上简化的迭代器. class ArrayList implements Iterable<E>{ //...

Global site tag (gtag.js) - Google Analytics