Iterator迭代器模式
来源:互联网 发布:win10下装mac双系统 编辑:程序博客网 时间:2024/06/07 05:25
ArryList和LinkedList遍历的方式肯定是不一样的,如果用for循环中遍历,那么每一种不同的容器实现遍历肯定不一样,要统一所有的容器的遍历(调用一样,但容器底层不一样),那么让每一种容器都实现Iterator接口,用此接口对容器进行遍历。
之所以把Iterator单独写成一个组件,聚合在Collection或Map内部,而不把元素遍历直接写在Collection或Map接口里,原因如下:
1、接口应当设计得越细越好,组件分开
2、当用户使用一个组件时,该组件要实现什么功能就是用什么接口,而不需要关心其他接口的实现。
说白了,就是把遍历功能单独封装成一个对象
Iterator迭代器接口,用于统一不同容器的迭代方式
package test;public interface Iterator { public boolean hasNext(); public Object next();}
Collection顶级容器中返回一个Iterator对象,用于对容器进行迭代
package test;public interface Collection { public void add(Object o); public int size(); //返回迭代器对象 public Iterator iterator();}
ArrayList中用内部类来写具体的迭代方法
package test;//手动写一个容器类,用数组模拟public class ArrayList implements Collection { // 数组大小为10,当数组中装满时,扩展空间,这样就可以实现无限多个 Object[] objects = new Object[10]; // index记录装了多少个对象 int index; // 添加对象 public void add(Object o) { if (index == objects.length) { // 当现有数组满了就创建一个新的数组对象,这个数组对象创建为多大,java内部会有一个加权算法 Object[] newObjects = new Object[objects.length * 2]; // 把原数组内容copy到新数组中 System.arraycopy(objects, 0, newObjects, 0, objects.length); // 元素组引用指向新数组 objects = newObjects; } objects[index] = o; index++; } // 容器已装元素的个数 public int size() { return index; } // 迭代器 @Override public Iterator iterator() { // TODO Auto-generated method stub return new ArrayListIterator(); } // 用内部类来写不同容器的迭代方式 private class ArrayListIterator implements Iterator { //记录当前访问到哪一个index了。 private int currentindex=0; @Override public boolean hasNext() { if (currentindex>=index) return false; else return true; } @Override public Object next() { Object o=objects[currentindex++]; currentindex++; return o; } }}
0 0
- 迭代器模式(Iterator Pattern)
- 迭代器(Iterator)模式
- 迭代器模式(Iterator pattern)
- 迭代器模式(Iterator Pattern)
- 迭代器模式(Iterator pattern)
- 迭代器模式(Iterator)
- Iterator(迭代器)模式
- 迭代器模式(Iterator pattern)
- Iterator 迭代器模式
- 迭代器模式(Iterator pattern)
- 设计模式 -- Iterator(迭代器)
- 迭代器模式(Iterator)
- 24.迭代器模式--Iterator
- 迭代器模式(Iterator)
- iterator 迭代器模式
- 迭代器模式(Iterator Pattern)
- 迭代器模式(Iterator)
- 迭代器模式【ITERATOR PATTERN 】
- 容器剖析
- BZOJ 1071([SCOI2007]组队-双指针)
- BZOJ 3670([Noi2014]动物园-kmp变形)
- binormal
- Effective Java 读书笔记——38:检查参数的有效性
- Iterator迭代器模式
- Leetcode 71. Simplify Path
- 一步一步封装一个简洁高效可拓展的Adapter
- perceptual Roughness vs Roughness
- 深入浅出FPGA-14-ChipScope软件使用
- Python轻松入门-07 if elif else
- Leap Motion开发环境配置LeapmotionDevelopmentKit3.2.0+VS2013
- normal map compression & tangent to world space conversion
- uva 11210 麻将