概述
foreach是java中循环的一种,用于便利数组或者集合中的元素。for循环用于遍历数组的时候需要预先知道数组的大小。而foreach和iterator便利集合时不需要知道数组或者集合的大小。
一般来说,我们遍历已知类型数组的话一般采用foreach循环的形式。而我很久之前听过一个前辈说过,如果集合为空的话那么运行时将会报空指针的错误,今天来验证一下。
首先建立一个空的数组,利用foreach循环遍历下
结果是能运行成功,并没有报空指针的异常。
接下来测试下list为空指针时
结果会报空指针异常。通过这个结果我们进一步debug一下,发现如果是空list的话,是不会进入foreach循环的内部的。而如果是空指针的话,在foreach判断阶段则报了异常。
接下来我们测试下iterator迭代器。
可以看出,在空数组的情况下,iterator迭代其是不会报错的。那么空指针的情况下呢
抛出了空指针异常,而且抛出的异常是在标注的位置。既然这样,那么foreach和iterator是不是有什么内在的关联呢。我查询了list的父类Collection,发现它继承了Iterable类
而Iterable类里面有定义iterator对象。foreach其实也是通过iterator而实现的,故和iterator具有相同的性质。
那么问题来了,我们什么情况下改用foreach,什么情况下用iterator呢。通过资料查询,得知iterator是不需要判断集合的类型的,所以我们在不知道集合类型的情况下完全可以用iterator来实现。但是foreach就不行了
这样我们可以处理我们不知道类型的集合遍历。接下来我们进行一下效率的对比。选取100000000个元素的数组,分别用list和iterator进行循环遍历
首先是iterator
总耗时15
接下来是foreach
总好是146.可见效率天差地别
最后
以上就是默默棒棒糖为你收集整理的关于Foreach的简单理解的全部内容,希望文章能够帮你解决关于Foreach的简单理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复