持有对象(容器)——适配器(反向迭代器使用)
来源:互联网 发布:720全景源码 编辑:程序博客网 时间:2024/05/19 09:02
应用:
当你有一个接口并需要另一个接口时,编写适配器可以解决。
(我希望在默认的前向迭代器的基础上,添加产生反向迭代器的能力,因此不能使用覆盖,而是添加了一个能够产生Iterable对象的方法,该对象可以用于foreach语句。)
代码编写:
a:类继承class ReversibleArrayList<T> extends ArrayList<T>,再写返回类型为iterator<Object>()方法,之后有提示
class ReversibleArrayList<T> extends ArrayList<T>{ // 反向迭代器private static final long serialVersionUID = 1L;public ReversibleArrayList(Collection<T> c){ super(c); }public Iterable<T> reversed(){return new Iterable<T>() {public Iterator<T> iterator() {return new Iterator<T>() {int current = size() - 1;public boolean hasNext() {return current > -1;}public T next() {return get(current--);}public void remove() {throw new UnsupportedOperationException();}};}};}}测试:
public class AdapterMethodIdiom {public static void main(String[] args) {ReversibleArrayList<String> ral = new ReversibleArrayList<String>(Arrays.asList("To be or not to be".split(" ")));for (String string : ral) //放在foreach语句中,将得到(默认的)向前迭代器System.out.print(string+" ");System.out.println();for (String string : ral.reversed()) {System.out.print(string+" ");} }}打印:
b:编写类继承class IterableClass implements Iterable<Object>会直接添加返回类型为Iterator<Object>的方法,return Iterator<Object>(){hasNext(),next(),remove()}
public class IterableClass implements Iterable<Object>{protected String[] words = ("And that is how " + "we know the Earth to be banana-shaped.").split(" ");public Iterator<Object> iterator() {return new Iterator<Object>() {private int index = 0;public boolean hasNext() {return index < words.length;}public String next() {return words[index++];}public void remove() {throw new UnsupportedOperationException();}};}}应用:
public class MultiIterableClass extends IterableClass{public Iterable<Object> reversed(){return new Iterable<Object>() {public Iterator<Object> iterator() {return new Iterator<Object>() {int current = words.length-1;public void remove() {throw new UnsupportedOperationException();}public String next() {return words[current--];}public boolean hasNext() { return current > -1;}};}};}public Iterable<String> randomized(){return new Iterable<String>() {public Iterator<String> iterator() {List<String> shuffled = new ArrayList<String>(Arrays.asList(words));Collections.shuffle(shuffled);//打乱数组return shuffled.iterator();}};}public static void main(String[] args) {MultiIterableClass mic = new MultiIterableClass();for (Object string : mic.reversed()) System.out.print(string.toString()+" ");System.out.println();for (String string : mic.randomized())System.out.print(string+" ");System.out.println();for (Object object : mic) {System.out.print(object.toString()+" ");}}}控制台打印
0 0
- 持有对象(容器)——适配器(反向迭代器使用)
- 持有对象(容器)
- Java Base —— 持有对象(容器)
- java容器(持有对象方式)小结
- 第十一章、持有对象(容器)
- 持有对象的管理(容器)
- [Java代码] JAVA 持有对象——容器初探(持续补充)
- Thinking in Java 第11章 持有对象(容器)
- Java编程思想 第十一章 持有对象(容器)
- 持有对象--->容器
- 持有对象--->容器
- Java容器 持有对象
- 持有对象(容器)
- java 持有对象,容器
- 持有对象(集合)
- Java编程思想——持有对象(11)
- 第十一章持有对象之容器的使用
- 持有多个对象-容器
- OpenCV实现基于傅里叶变换的旋转文本校正
- Linux 内核时钟架构之时钟源设备再论read
- Android工程师技能表
- Hibernate基础------》映射关系---》one2one
- PHP版微信公众平台搭建与开发(PDF完整版+视频教程+代码)
- 持有对象(容器)——适配器(反向迭代器使用)
- 【解决】Linux下搜狗输入法无法显示候选框
- 七天学会NodeJS
- golang 线程池
- 拾麦子 java蓝桥杯算法省题
- VRTK插件详解三:交互之相关脚本分析
- android热门框架----androidannotations
- jQuery 遍历
- LoadRunner: 脚本回放时的错误“HTTP 状态码401未授权“