1. Iterable接口: 实现这个接口允许对象成为 "foreach" 语句的目标;Collection实现了此接口
2. ArrayList实现了Iterable接口,提供了用foreach正向迭代的能力,现在需要增加一个反向迭代的能力,实现代码如下:
a)用到了适配器模式
package context;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
public class ReverseArrayList<T> extends ArrayList<T> {
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
ReverseArrayList<String> list = new ReverseArrayList<String>(Arrays.asList("you are a pig ?".split(" ")));
//此处将list向上转型为Iterable
for(String str : list) { //(Iterable<String>list)
System.out.print(str + " ");
}
System.out.println();
for(String str : list.reversed()) {
System.out.print(str + " ");
}
System.out.println();
}
public ReverseArrayList(Collection<T> c) {
super(c);
}
public Iterable<T> reversed() {
return new Iterable<T>() {
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
int current = size() -1;
@Override
public boolean hasNext() {
return current > -1;
}
@Override
public T next() {
return get(current--);
}
@Override
public void remove() {
throw new RuntimeException();
}
};
}
};
}
}
//output
you are a pig ?
? pig a are you