标签:
先贴代码
package com.tsubasa.collection; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; public class ReversibleArrayList<T> extends ArrayList<T>{ public ReversibleArrayList(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 UnsupportedOperationException() ; } } ; } } ; } public static void main(String[] args) { ReversibleArrayList<String> list = new ReversibleArrayList<String>( Arrays.asList("to be or not to be it is a question".split(" "))) ; for(String str : list){ System.out.print(str + " "); } System.out.println(); for(String str :list.reversed()){ System.out.print(str + " "); } } }
运行结果:
to be or not to be it is a question
question a is it be to not or be to
上面这种解决方案使用了所谓的适配器方法,适配器部分来自于设计模式,因为我们这里使用foreach遍历list,所以我们必须提供满足foreach的接口。
因为我们的ArrayList已经实现了Iterable接口,所以下面有两个选择来实现倒序输出:
1.覆盖ArrayList原有的iterator方法
2.自己在生产一个iterator接口。
通过上面的代码,显然这里我们选择了第二种方法。
标签:
原文地址:http://www.cnblogs.com/zqlxtt/p/4423231.html