迭代器的实现原理

迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口,设计人员无需关心容器对象的内存分配的实现细节。

1.调用iterator方法,不同集合返回的迭代器对象 也就是Iterator接口的实现类 会覆盖重写该方法,不同的实现类覆盖重写的是不一样的。

调用iterator方法,返回的是Iterator接口的具体的实现类

1.ArrayList的iterator方法返回的迭代器对象是:new Itr()

源码:

 Itr()是Iterator接口的实现类

源码:

 2.LinkedList的iterator方法返回的迭代器对象是:new ListItr()

源码:

 ListItr()是ListIterator接口的实现类,也是Itr的子类,ListIterator是Iterator的子类。

源码:

 

 Iterator是一个迭代器接口,专门用于迭代器各种Collection集合,包括Set集合和List集合。

以上是List集合的迭代器方法返回对象,下面是Set集合的迭代器返回对象

Set集合的迭代器返回对象:KeyIterator()

源码:

 

 说明一下ArrayList的迭代器方法的实现原理:

源码:

   private class Itr implements Iterator<E> {
	        int cursor;       // index of next element to return
	        int lastRet = -1; // index of last element returned; -1 if no such
	        int expectedModCount = modCount;
	        // prevent creating a synthetic constructor
	        Itr() {} //Itr这个类是一个成员内部类
	        public boolean hasNext() {
	        	//size是外部类的成员变量
	        }
	            return cursor != size;
	        }
	        @SuppressWarnings("unchecked")
	        public E next() {
	            checkForComodification();
	            int i = cursor;
	            if (i >= size)
	                throw new NoSuchElementException();
	          //elementData是外部类的成员变量
	            Object[] elementData = ArrayList.this.elementData;
	            if (i >= elementData.length)
	                throw new ConcurrentModificationException();
	            cursor = i + 1;
	            return (E) elementData[lastRet = i];
	        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值