迭代器设计模式

1.迭代器设计模式

interface myIterator<Item>		//定义一个接口
{
	boolean hasNext();
	void remove();
	Item next();
}

interface myIterable<Item>		
{
	myIterator<Item> iterator();	//返回接口类型的方法
}

class myArrayList1<Item> implements myIterable<Item>		
{
	private Item[] elementData;
	private int size;

	public myArrayList1()
	{
		this(10);	//默认的情况下,大小为10
	}
	
	public myArrayList1(int initialCapacity)
	{
		if(initialCapacity<0)			//如果列表大小设置小于0,会报出异常
		{
			try {
				throw new Exception();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		elementData = (Item[])new Object[initialCapacity];	//没有泛型数组,所以这里使用强制转换
	}
	
	//增加元素
	public void add(Item obj)
	{
		//数组扩容
		/*
			数组扩容的基本方法,将size*2
		 */
		if(size>elementData.length-1)
		{
			Item[] newArray = (Item[])new Object[(size*3)/2+1];
			//System.arraycopy(elementData, 0, newArray, 0, elementData.length);//也可以使用数组复制调用函数
			for(int i=0;i<elementData.length;i++)		
			{
				newArray[i] = elementData[i];
			}
			elementData = newArray;		//将elementData指向新的数组
		}
		elementData[size++] = obj;
	}


	@Override
	public myIterator<Item> iterator() {		//Item
		return new ArrayListIterator();		//返回一个迭代器对象
	}
	
	private class ArrayListIterator implements myIterator<Item>//Item类型
	{
		int i = 0;
		@Override
		public boolean hasNext() {
			return i!=size;
		}

		@Override
		public Item next() {
			return elementData[i++];				//返回Item类型
		}
		
		@Override
		public void remove() {
			
		}
	}

}
class myItrableTest
{
	public static void main(String[] args)
	{
		myArrayList1<String> arrayList = new myArrayList1<>(3);
		//1.add方法的验证
		arrayList.add("3");
		arrayList.add("4");
		arrayList.add("5");
		arrayList.add("6");
		
		myIterator<String> it = arrayList.iterator();		//返回一个迭代器对象
		while(it.hasNext())
		{
			System.out.print(it.next()+" ");
		}
	}
}

1、通过arrayList.iterator()返回了一个myIterator(迭代器)对象,该迭代器对象实现了三个方法hasNext(),next(),remove(),通过三个方法来对容器进行遍历。

2.注意Iterable和Iterator中使用的泛型Item,使用泛型因为返回的next()的值是Item类型,该类型就是集合中元素的类型。

3.自己对迭代器模式的理解:

其实迭代器模式,本质就是使用内部类对外部类的属性进行访问,定义的一个内部类的实例——迭代器(myIterator it),然后利用内部类可以访问外部类属性的特征来对外部类的成员进行操作(遍历).

参考:https://blog.csdn.net/zhengzhb/article/details/7610745

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值