迭代器的内部类实现

疑问练习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 自动生成的构造函数存根
	}

	@Override
	public 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;
		}

		@Override
		public 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();
		}

		@Override
		public Object next() {
			// TODO 自动生成的方法存根
			if (hasnext()) {
				cusuor++;
				
				return linkedList.get(cusuor);
			}
			return null;
		}

		@Override
		public boolean hasnext() {
			// TODO 自动生成的方法存根
			return cusuor < linkedList.size()-1;
		}

		@Override
		public 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);
		
	}

}



  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值