Foreach与迭代器

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(" ");
	@Override
	public Iterator<String> iterator() {
		// TODO Auto-generated method stub
		return new Iterator(){
			private int index=0;
			@Override
			public boolean hasNext() {
				// TODO Auto-generated method stub
				return index<words.length;
			}

			@Override
			public String next() {
				// TODO Auto-generated method stub
				return words[index++];
			}

			@Override
			public 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>(){

			@Override
			public Iterator<T> iterator() {
				// TODO Auto-generated method stub
				return new Iterator(){
					private int index=size()-1;
					@Override
					public boolean hasNext() {
						// TODO Auto-generated method stub
						return index>-1;
					}

					@Override
					public Object next() {
						// TODO Auto-generated method stub
						return get(index--);
					}

					@Override
					public 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);
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值