java的单例集合迭代器

迭代器Iterator

        根据之前的介绍我们知道,单例集合是由接口Collection定义的容器。Collection接口之下由定义了List接口和Set接口,其中List接口定义的容器的特征是有序可重复,而Set接口定义的容器的特征是无序不可重复的。

        List接口定义的容器的底层是通过数组来实现的,它的每一个容器中的元素都具有属于自己的索引,因此可以定义重复的元素,并且保证了元素的有序性。又由于List接口定义的容器中的元素都有下标,因此我们可以通过下标来对容器中的元素进行操作。如果我们要遍历容器中的元素就可以通过for循环来通过索引打印容器中的元素即可。

        与List接口定义的容器不同,Set接口定义的容器的底层是通过Hash算法来实现的,因此它的的元素是无序的,不可重复的。Set接口定义的容器中的元素是没有索引的,所以我们无法像List接口定义的容器那样通过索引来访问和操作Set接口定义的容器。因此在遍历Set接口定义的容器中的元素时,用for循环结构明显是行不通的。这里我们通常采用增强for循环来对Set接口定义的容器进行遍历操作,在介绍Set接口下的容器类时我们说过,增强for循环即for-each循环的本质就是迭代器,因此增强for循环既可以用来遍历Set接口下的容器,也可以用来遍历List接口下的容器。

        显然,通过上上面的简述我们能够发现,由于Set接口和List接口的实现方式不同它们对元素的操作方式是不同的,各个接口下的方法也是有区别的。但我们找到了一个共通之处那就是增强for循环的方式都能对这两个接口下的容器类进行遍历操作,因此我们推测是不是可以采用另一种方式也可以对这两个接口下的不同容器进行同一操作呢?答案是显然的,这个方式就是迭代器。

        java中的迭代器的接口是Iterator,在这个接口中定义了一个iterator的抽象方法。而我们介绍的单例集合接口Collection继承了这个接口,这也就意味着单例集合的具体实现类中都实现了抽象方法iterator。在单例集合的具体实现类中的iterator方法会返回一个Iterator接口类型的迭代器对象,这个对象中定义了三个方法,通过这三个方法我们就可以对容器中的元素进行相关操作。这个三个方法分别是hashNext,next以及remove。它们的作用如下:

        boolean hashNext():判断游标当前位置是否有元素,如果有返回true,否则返回false;

        Object next():获取游标当前位置所指向的元素,并将游标移动到下一个位置;

        void remove():删除当前游标所指向的元素,当执行完next方法后,这个操作只能执行一次。

迭代器工作原理

        结合上面描述的三个方法我们就可以简单地描述出迭代器的工作原理了。在一个容器中,当我们使用迭代器来遍历元素时游标(也可以说是指针)首先会指向第一个元素,如果第一个元素不为空,那么此时方法hashNext会返回boolean类型的值true,而一旦hashNext方法返回值true后,就会调用next方法,next方法会取出游标指向的元素然后将游标移动到下一个元素的位置,然后又调用hashNext方法。重复上面描述的过程直到所有的元素都被取出后,游标指向的位置没有元素了,这时hashNext方法返回的值为false,不再调用next方法,容器中的元素就遍历完成了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值