我是靠谱客的博主 和谐蜗牛,这篇文章主要介绍Java 遍历时如何选择for循环和Iterator,现在分享给大家,希望可以做个参考。

Java提供了很多的数据结构,例如:数组、集合、Map表等等,迭代器Iterator就是用来帮助我们做集合遍历工作的,在遍历这些数组或集合时通常可以使用for循环或是Iterator迭代器,那么我们如何来选择呢?

1、for循环和迭代器的选择:

在集合无法使用for循环遍历的时候,可以考虑Iterator,迭代之后可以进行遍历。

List接口的实现类ArrayList是在内存中开辟几个连续的存储空间,这样的话,直接使用for循环就可以遍历整个集合的元素。

但是Map不可以,比如Map接口的实现类HashMap,因为这个类的对象中的元素的储存方式并不是顺序存储,或是底层通过HashMap实现的HashSet,其内部结构不是顺序存储的,本身也没有提供get(index),这样通过索引来获取元素的方法,自然不能通过for循环来遍历,只可以使用Iterator来遍历。

总结:

  • 数组、List集合可以使用for循环也可以使用迭代器,但是建议使用for循环。
  • Set集合、Map表只可以使用迭代器进行遍历。

2、迭代器的工作方式:

在取出元素之前先判断集合中有没有元素,如果有就把元素取出来,再继续判断,直到将元素全部取出。

Iterator接口的常用方法:

  • hasNext():判断集合中还有没有可以被取出的元素,如果有返回true,没有返回false。(返回值是boolean)
  • next():取出集合中的下一个元素。(返回值是E,集合中的下一个元素)

分析:当集合调用Iterator it = set.itreator();创建一个迭代器以后,这段代码执行时,在集合的内部建立了一个指针(虽然Java中没有指针的概念,这里用指针描述更加便于理解)而指针的初始位置不是指向内存中的0位,而是-1位。
在这里插入图片描述

复制代码
1
2
3
4
while(set.hasNext()){ System.out.println(set.next()); }

每次取出前用hasNext()询问是否有下一个元素,如果有直接使用next()方法将其取出,该指针便会移向下一位,如果下一位没有元素了,也就是说hasNext()返回了false,会结束遍历。

3、迭代器的转型:

如果不指定泛型,集合是可以存储任意类型的对象的,由于元素被存放进集合后全部被提升为Object类型,而在使用迭代器遍历时,会默认使用Object来接收元素,当需要子类特有方法时,就需要向下转型,此时进行向下转型就可能发生类型转换异常。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args){ //在不指定泛型的情况下可以添加任意类型的元素 Collection c = new ArrayList(); c.add("opq"); c.add(111); Iterator it = coll.iterator(); while (it.hasNext()) { // it.next()获取出来的对象数据类型为Object //当需要使用子类对象特有方法时,需要向下转型,此时会报类型转换异常Integer无法转换为String String str = (String) it.next(); } }

4、增强for循环:

增强for循环是JDK5新推出的特性,增强for循环也称为新循环 for each,新循环不取代传统for循环的工作,它专门设计是用来遍历集合数组的。

增强for循环遍历集合会被编译器改为使用迭代器遍历,所以在遍历的过程中是不能通过集合的方法增删元素的。

增强for循环的底层实现是迭代器,相比迭代器而言除了语法简单其他的没有什么区别。

最后

以上就是和谐蜗牛最近收集整理的关于Java 遍历时如何选择for循环和Iterator的全部内容,更多相关Java内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部