在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();
//在这里改变对应方法的行为即可
}
}
}
}
}
?
?
?
?
?