`
sunlujing
  • 浏览: 177935 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Foreach 与迭代器

    博客分类:
  • j2se
阅读更多

在java编程中我会大量的使用 foreach 语法来遍历Collection对象 以及数组对象。

 

本文主要是解释一下foreach的实质以及如何改变 foreach遍历的行为

 

point A:

 

foreach语句之所以能够工作是因为 在JavaSe5 中引入的Iterable接口,该接口包含一个能产生Iterator对象的iterator方法。该Iterable 接口被foreach用来在序列中移动,任何实现Iterable 的接口类都可以被foreach遍历。

实现Itreable 接口主要是 重写 iterator方法,让该方法返回一个实现 iterator接口的对象。

interface iterator{

hasNext();

next();

        remove();

}

 

下面使用thinking in java 的一个例子来说明 怎么构建一个IterableClass

 

public class IterableClass implements Iterable<String>{

public Iterator<Object> iterator(){

return new Iterator<String>(){

boolean hasNext(){}

String next(){}

        void remove(){}

}

}

}

 

point B:

 

闲杂假设你有一个Iterable 类 比如 ArrayList<String>对象 arrayObj,

你使用 for(String str:arrayObj)只能实现默认顺序遍历。

如果你想使用逆序遍历,就需要重写一个生产 Iterator对象到方法,并把生产的ReverIterator 对象放入foreach语法中如下:

 

          for(String str:ReverArray.reverd()).

 

ex:

public class ReverArray extends ArrayList<String>{

public Iterable<String>  reversed(){

return new Iterable <String>(){

 

public Iterator<String> iterator(){

return new Iterator<String>(){

next();hasNext();remove();

//在这里改变对应方法的行为即可

}

}

}

}

}

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    总结javascript中的六种迭代器

    1.forEach迭代器 forEach方法接收一个函数作为参数,对数组中每个元素使用这个函数,只调用这个函数,数组本身没有任何变化 //forEach迭代器 function square(num){ [removed](num + ' ' + num*num + ' '); } ...

    Node.js-each-async-异步并行迭代器(异步forEach)

    each-async - 异步并行迭代器(异步forEach)

    java迭代器

    java迭代器 文章目录java迭代器Iterator 迭代器接口迭代器的方法:next():返回迭代中的下一个元素。hasNext():如果迭代具有更多元素,则返回true。remove():从基础集合中移除迭代器返回的最后一个元素。使用...

    Java中的迭代器和foreach原理

    主要介绍了Java中的迭代器和foreach原理,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下

    学习JavaScript设计模式之迭代器模式

    迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 JavaScript中的Array.prototype.forEach 一、jQuery中的迭代器 $.each([1, 2, 3], function(i, n) { console....

    ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)

    一、什么是迭代器? 生成器概念在Java,Python等语言中都是具备的,ES6也添加到了JavaScript中。...ES5中遍历集合通常都是 for循环,数组还有 forEach 方法,对象就是 for-in,ES6 中又添加了 Map 和 Set,而迭代器

    php和C#的yield迭代器实现方法对比分析

    本文实例讲述了php和C#的yield迭代器实现方法对比。...IEnumerable表示一个类可以迭代,也就是可以用foreach遍历,IEnumerator是真正的迭代器实现,IEnumerable和IEnumerator一个是使用迭代器的接口,一个是实现迭

    详解JavaScript中的forEach()方法的使用

    主要介绍了详解JavaScript中的forEach()方法的使用,是JS入门学习中的基础知识,需要的朋友可以参考下

    each-async:异步并发迭代器(async forEach)

    异步并发迭代器(async forEach) 类似于 ,但很小。 我经常在迭代时使用async.each()进行异步操作,但是我几乎从未在async使用其他gadzillion方法。 异步迭代是最常用的异步控制流模式之一。 我强烈建议改用...

    C#中foreach语句深入研究

    本文通过手动实现迭代器来了解foreach语句的本质。 2、使用foreach语句遍历集合 在C#中,使用foreach语句来遍历集合。foreach语句是微软提供的语法糖,使用它可以简化C#内置迭代器的使用复杂性。编译foreach语句,会...

    PHP迭代器和迭代的实现与使用方法分析

    本文实例讲述了PHP迭代器和迭代的实现与使用方法。分享给大家供大家参考,具体如下: PHP的面向对象引擎提供了一个非常聪明的特性,就是,可以使用foreach()方法通过循环方式取出一个对象的所有属性,就像数组方式...

    seqit:多功能JavaScript迭代器

    seqit是与Node.js和浏览器兼容的通用迭代器模块,旨在提供一种受C ++迭代器启发while使用for或while循环遍历数组或对象的简单方法。 您可以使用seqit函数包装任何数组或对象,并遍历其元素或键。 您还可以就地编辑...

    PHP设计模式入门之迭代器模式原理与实现方法分析

    不使用迭代器模式很难实现,先看实现的代码: sample.php &lt;?php class Sample implements Iterator{ private $_arr; public function __construct(Array $arr){ $this-&gt;_arr = $arr; } public function ...

    monkey:函数式迭代器(ala underscore.js、forEach、map、reduce 等)但用于树

    函数式迭代器(ala underscore.js、forEach、map、reduce 等)但用于树 为什么是猴子? 为什么是prim8 ? 因为他们喜欢爬树! 这东西喜欢爬树 它具体有什么作用? 树等效版本: 为每个 找 查找最后一个 一些 每...

    深入理解JavaScript系列(35):设计模式之迭代器模式详解

    3.遍历的同时更改迭代器所在的集合结构可能会导致问题(比如C#的foreach里不允许修改item)。 正文 一般的迭代,我们至少要有2个方法,hasNext()和Next(),这样才做做到遍历所有对象,我们先给出一个例子: 代码...

    PHP迭代器和生成器用法实例分析

    迭代器实际是一个实现了Iterator的类,可以用foreach进行遍历。 例如: &lt;?php class Sample implements Iterator{ private $curIndex=0; private $items=null; public function __construct($_items) { $...

    C#中foreach语句使用break暂停遍历的方法

    主要介绍了C#中foreach语句使用break暂停遍历的方法,涉及C#中break语句跳出foreach循环的使用技巧,非常具有实用价值,是C#初学者必须掌握的重要技巧,需要的朋友可以参考下

    C#迭代器及Unity协程实例解析

    1、C#迭代器 1.1、IEnumerable和IEnumerator C#中的迭代器封装在IEnumerable和IEnumerator和他们的泛型接口中。 IEnumerable:定义了一个可以获取IEnumerator的方法—GetEnumerator()。 //IEnumerable的代码实现...

Global site tag (gtag.js) - Google Analytics