Java中的迭代器

【精】Java中的迭代器

大家好,我是山大,有到了我有一个朋友系列。
最近,山大的一个朋友问迭代器的问题,有感而发,写了这篇浅析。
问:辣系个炎热的夏天,他问我,为什么有了for循环,还要迭代器,为什么…mmmm,
答:这种问题怎么从你嘴里说出来,咳咳,编不下去了
本章目标
了解什么是迭代器,知道java中迭代器的使用和原理,增强for循环底层与实现。

迭代器的概念

在进入正题之前,我们先聊了解一下什么是迭代:
迭代的概念:
百度百科是这样描述的:
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。

重复执行一系列运算步骤,从前面的量依次求出后面的量的过程。此过程的每一次结果,都是由对前一次所得结果施行相同的运算步骤得到的。例如利用迭代法*求某一数学问题的解。

对计算机特定程序中需要反复执行的子程序*(一组指令),进行一次重复,即重复执行程序中的循环,直到满足某条件为止,亦称为迭代。

可以这么说,在java中迭代器中迭代就是重复获取集合中的元素,直到满足条件位置。如何获取,如何判断条件,就是方法了。

开发中:
我们都知道,Connection(所有单列集合的父接口),Set和List两个接口继承的就是Connection,开发中,经常需要遍历Connection集合中的所有元素。
如果用for循环就有些许麻烦,针对这种需求,从1.2版本开始,JDK给我们提供了一个一个专门的接口Iterator(java.util.Iterator)。
通过API搜索,下图:
在这里插入图片描述
小拓展:

在JDK1.0的时候的迭代,用的是Enumeration ,JDK1.2开始、Iterator代替了Enumeration ,至于为什么代替,可以去看一下API找一下Enumeration对比一下就知道了。有兴趣可以去了解一下。这里只是标明就不多说了,对比一下就知道了。

如何迭代(遍历)元素?

知道了什么是迭代,什么是迭代器之后,问题就来了:如何用迭代器如何遍历集合。
在迭代器中有这样的一个方法:public interface Iterator 上面图有标出

迭代器方法
在这里插入图片描述
不用全部,用给出的其中两个方法即可实现遍历:

	boolean hasNext​() 如果迭代具有更多元素,则返回 true 。  
	E next​() 返回迭代中的下一个元素。  

示例代码:
在这里插入图片描述
从上图可以明显看到运行的每一步。通过while循环,没循环一次获取一个 值,知道判断条件为false。

迭代器的实现原理:
在这里插入图片描述
每取出一位元素,下标(指针)往下移动一位。没错,就是这么简单。

JDK5特性增强for循环(for each):
关于增强for循环,是JDK5的特性,更加简化和方便。专门用来遍历数组和集合,其底层原理就是一个迭代器。它只是在迭代器的基础上简化了书写。所以同Iterator一样所有的单列集合都可以用增强for来遍历。

	for(集合或数组的数据类型 名称:要遍历的数组或集合){
		System.out.prinln(名称)
}
	如:
		List<String> in = new ArrayList<>();
		for(String in: in){
		System.out.prinln(名称)
}
  • 问题:为什么迭代器和增强for在遍历的时候不能执行增删改查?

    因为在通过迭代器/增强for来遍历集合元素的同时,增加或者删除集合中的元素,
    【有可能】会导致某个元素被重复遍历或遍历不到。
    为什么会这样,因为数组在增删改查的时候,在删除时,数组元素往前移,就会可能重新遍历到了。

  • 问题:为什么所有单列集合都可以使用增强for?
    因为所有单列集合的父亲(Collection)都继承了Iterator迭代器接口。

    寄语:
    知识的海洋无比巨大!懂的越多,不懂的越多。
    我是山大,下期见!

本章难免会有错
误和不足之处,作者原得到广大读者的指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值