Foreach与迭代器

来源:互联网 发布:江湖婚庆 3.0源码 编辑:程序博客网 时间:2024/05/18 15:25

Iterable接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动,意思就是想要将一个类用在foreach语句中它就要实现Iterable.

package com.zhu.foreach;import java.util.Iterator;public class ForEachCollections implements Iterable<String>{String words[]="i like java very much".split(" ");@Overridepublic Iterator<String> iterator() {// TODO Auto-generated method stubreturn new Iterator(){private int index=0;@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn index<words.length;}@Overridepublic String next() {// TODO Auto-generated method stubreturn words[index++];}@Overridepublic void remove() {// TODO Auto-generated method stub}};}public static void main(String[] args) {for(String s:new ForEachCollections()){System.out.println(s);}}}

一个查看操作系统环境变量的示例

package com.zhu.foreach;import java.util.Map;public class EnvironmentVariables {    public static void main(String[] args) {        for(Map.Entry<String, String> entry:System.getenv().entrySet()){            System.out.println("key:"+entry.getKey()+"  value:"+entry.getValue());        }    }}

在默认的前向迭代器的基础上添加反向迭代的能力,因此我们不能使用覆盖,而是添加一个能够产生Iterable对象的方法。

package com.zhu.foreach;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.Iterator;public class RevArrayList<T> extends ArrayList<T>{public RevArrayList(Collection<T>c){super(c);}public Iterable<T> reversed(){return new Iterable<T>(){@Overridepublic Iterator<T> iterator() {// TODO Auto-generated method stubreturn new Iterator(){private int index=size()-1;@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn index>-1;}@Overridepublic Object next() {// TODO Auto-generated method stubreturn get(index--);}@Overridepublic void remove() {// TODO Auto-generated method stub}};}};}public static void main(String[] args) {RevArrayList<String>revArrayList=new RevArrayList<String>(Arrays.asList("i like java very much".split(" ")));for(String s:revArrayList){System.out.println(s);}System.out.println("-------------------------------");for(String s:revArrayList.reversed()){System.out.println(s);}}}


原创粉丝点击