迭代器的内部类实现

来源:互联网 发布:js原型链继承 编辑:程序博客网 时间:2024/06/05 16:33

疑问练习http://blog.csdn.net/lovelion/article/details/9992931

       设计一个逐页迭代器,每次可返回指定个数(一页)元素,并将该迭代器用于对数据进行分页处理。


//采用内部类的方式进行了实现,但是由于画在里面让关系不是很清楚,我就画在了外面,在这里内部类的使用和没使用内部类的效果是相同的



代码如下:

设计代码:

// 主要为实现分页效果,其他小方法就不实现了abstract class iterator {public abstract Object[] paging(int count);// 分页,count:返回多少个元素public abstract void allpaging(int count);public abstract Object next();public abstract boolean hasnext();}abstract class product {protected LinkedList linkedList;public product(LinkedList ll) {this.linkedList = ll;}public abstract LinkedList getlist();public abstract iterator iterator();}class productconcrete extends product {public productconcrete(LinkedList ll) {super(ll);// TODO 自动生成的构造函数存根}@Overridepublic LinkedList getlist() {// TODO 自动生成的方法存根return linkedList;}// 创建一个迭代器public iterator iterator() {return new iteratorconcrete(this);}// 内部类,专门负责逐页迭代器的管理class iteratorconcrete extends iterator {private productconcrete pc;// 在这里坐着随机采用了一种数据结构linked,这是一种首尾链表,如果感兴趣的大家就可以去研究一下// 在这里我把Linkedlist当做普通的arraylist来使用,所以存在cusour,虽然性能上可能并不好,但是没关系private int cusuor;private LinkedList linkedList;public iteratorconcrete(productconcrete pc) {// TODO 自动生成的构造函数存根this.pc = pc;linkedList = pc.getlist();cusuor = 0;}@Overridepublic Object[] paging(int count) {// TODO 自动生成的方法存根ArrayList<Object> o = new ArrayList<>();int index =0;while (hasnext() && index<count) {Object object = next();o.add(object);System.out.println(object);index++;}return o.toArray();}@Overridepublic Object next() {// TODO 自动生成的方法存根if (hasnext()) {cusuor++;return linkedList.get(cusuor);}return null;}@Overridepublic boolean hasnext() {// TODO 自动生成的方法存根return cusuor < linkedList.size()-1;}@Overridepublic void allpaging(int count) {// TODO 自动生成的方法存根while(hasnext()){System.out.println("----分页线----");paging(count);}}}
客户端代码:
public class Client {public static void main(String[] args) {// TODO 自动生成的方法存根LinkedList ll = new LinkedList<>();ll.add(3);ll.add("dfjkslfj");ll.add("FDjksl");ll.add(4535);ll.add(3);ll.add("dfjkslfj");ll.add("FDjksl");ll.add(4535);ll.add(3);ll.add("dfjkslfj");ll.add("FDjksl");ll.add(4535);product product = new productconcrete(ll);iterator iterator = product.iterator();//进行单个分页//Object[] o = iterator.paging(6);//输出o即可//进行全体分页iterator.allpaging(3);}}



原创粉丝点击