我是靠谱客的博主 和谐蜗牛,最近开发中收集的这篇文章主要介绍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位。
在这里插入图片描述

while(set.hasNext()){
System.out.println(set.next());
}

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

3、迭代器的转型:

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

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 遍历时如何选择for循环和Iterator所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部