在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();
//在这里改变对应方法的行为即可
}
}
}
}
}
分享到:
相关推荐
1.forEach迭代器 forEach方法接收一个函数作为参数,对数组中每个元素使用这个函数,只调用这个函数,数组本身没有任何变化 //forEach迭代器 function square(num){ [removed](num + ' ' + num*num + ' '); } ...
each-async - 异步并行迭代器(异步forEach)
java迭代器 文章目录java迭代器Iterator 迭代器接口迭代器的方法:next():返回迭代中的下一个元素。hasNext():如果迭代具有更多元素,则返回true。remove():从基础集合中移除迭代器返回的最后一个元素。使用...
主要介绍了Java中的迭代器和foreach原理,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 JavaScript中的Array.prototype.forEach 一、jQuery中的迭代器 $.each([1, 2, 3], function(i, n) { console....
一、什么是迭代器? 生成器概念在Java,Python等语言中都是具备的,ES6也添加到了JavaScript中。...ES5中遍历集合通常都是 for循环,数组还有 forEach 方法,对象就是 for-in,ES6 中又添加了 Map 和 Set,而迭代器
本文实例讲述了php和C#的yield迭代器实现方法对比。...IEnumerable表示一个类可以迭代,也就是可以用foreach遍历,IEnumerator是真正的迭代器实现,IEnumerable和IEnumerator一个是使用迭代器的接口,一个是实现迭
主要介绍了详解JavaScript中的forEach()方法的使用,是JS入门学习中的基础知识,需要的朋友可以参考下
异步并发迭代器(async forEach) 类似于 ,但很小。 我经常在迭代时使用async.each()进行异步操作,但是我几乎从未在async使用其他gadzillion方法。 异步迭代是最常用的异步控制流模式之一。 我强烈建议改用...
本文通过手动实现迭代器来了解foreach语句的本质。 2、使用foreach语句遍历集合 在C#中,使用foreach语句来遍历集合。foreach语句是微软提供的语法糖,使用它可以简化C#内置迭代器的使用复杂性。编译foreach语句,会...
本文实例讲述了PHP迭代器和迭代的实现与使用方法。分享给大家供大家参考,具体如下: PHP的面向对象引擎提供了一个非常聪明的特性,就是,可以使用foreach()方法通过循环方式取出一个对象的所有属性,就像数组方式...
seqit是与Node.js和浏览器兼容的通用迭代器模块,旨在提供一种受C ++迭代器启发while使用for或while循环遍历数组或对象的简单方法。 您可以使用seqit函数包装任何数组或对象,并遍历其元素或键。 您还可以就地编辑...
不使用迭代器模式很难实现,先看实现的代码: sample.php <?php class Sample implements Iterator{ private $_arr; public function __construct(Array $arr){ $this->_arr = $arr; } public function ...
函数式迭代器(ala underscore.js、forEach、map、reduce 等)但用于树 为什么是猴子? 为什么是prim8 ? 因为他们喜欢爬树! 这东西喜欢爬树 它具体有什么作用? 树等效版本: 为每个 找 查找最后一个 一些 每...
3.遍历的同时更改迭代器所在的集合结构可能会导致问题(比如C#的foreach里不允许修改item)。 正文 一般的迭代,我们至少要有2个方法,hasNext()和Next(),这样才做做到遍历所有对象,我们先给出一个例子: 代码...
迭代器实际是一个实现了Iterator的类,可以用foreach进行遍历。 例如: <?php class Sample implements Iterator{ private $curIndex=0; private $items=null; public function __construct($_items) { $...
主要介绍了C#中foreach语句使用break暂停遍历的方法,涉及C#中break语句跳出foreach循环的使用技巧,非常具有实用价值,是C#初学者必须掌握的重要技巧,需要的朋友可以参考下
1、C#迭代器 1.1、IEnumerable和IEnumerator C#中的迭代器封装在IEnumerable和IEnumerator和他们的泛型接口中。 IEnumerable:定义了一个可以获取IEnumerator的方法—GetEnumerator()。 //IEnumerable的代码实现...