先贴代码

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接口。

通过上面的代码,显然这里我们选择了第二种方法。

最新文章

  1. Java初识
  2. Hmmer安装与使用
  3. git——学习笔记(二)远程仓库
  4. C#导出
  5. oracle审计
  6. CAGradientLayer实现色差动画
  7. poj 1185 火炮 (减少国家DP)
  8. 原生AJAX基础讲解及兼容处理
  9. C# 根据年、月、周、星期获得日期等
  10. Alpha第六天
  11. Redis之实战篇(与Mybatis整合)
  12. Python操作HBase之happybase
  13. Android框架式编程之RxJava(一):HelloWorld
  14. 在docker中运行mariadb程序
  15. SQL-56 获取所有员工的emp_no、部门编号dept_no以及对应的bonus类型btype和recevied,没有分配具体的员工不显示
  16. setCapture 使用方法
  17. vue的地图插件amap
  18. [Oracle]数据库的Control File 取Dump后的样例
  19. Git for Windows之推送本地版本库到远程仓库
  20. 快速排序—三路快排 vs 双基准

热门文章

  1. 如何优雅的使用RabbitMQ(转载)
  2. 《C++编程思想》(第二版)第3章 C++中的C(笔记、习题及答案)(二)
  3. 点滴积累【JS】---JS小功能(setInterval实现图片效果显示时间)
  4. 深入理解C#学习笔记之走出误区
  5. Request介绍及演示样例 PART1
  6. Atitit.jpg png格式差别以及解决jpg图片不显示的问题
  7. 李洪强详细介绍SDWebImage
  8. eclipse导入svn中的maven工程项目
  9. linux命令之高级使用 find
  10. 27. Retrofit2 -- How to Use Dynamic Urls for Requests