iterator迭代器和for循环的区别,java迭代器iterator详解

  iterator迭代器和for循环的区别,java迭代器iterator详解

  00-1010一、迭代器接口1。用迭代器接口2遍历集合元素。迭代器接口方法3。迭代器的执行原理3.1代码演示3.2代码执行过程分析4。迭代器接口remove()方法4.1代码演示4.2注5。代码演示2。foreach循环1。概述2。语法分析3。代码演示4。容易出错的问题

  

目录

 

  

一、Iterator迭代器接口

迭代器对象称为迭代器(一种设计模式),主要用于遍历集合集合中的元素。

 

  GOF将迭代器模式定义为提供一种方法来访问容器对象中的每个元素,而不暴露对象的内部细节。迭代器模式是为容器而生的。类似于“公交车上的售票员”、“火车上的乘务员”、“空姐”。

  Collection接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,因此所有实现Collection接口的集合类都有一个iterator()方法来返回实现Iterator接口的对象。

  迭代器只用于遍历集合,迭代器本身不提供托管对象的能力。如果你需要创建一个迭代器对象,你必须有一个迭代集。

  每次集合调用iterator()方法,都会得到一个全新的迭代器对象,默认光标在集合的第一个元素之前。

  

1. 使用Iterator接口遍历集合元素

 

  注意:在调用it.next()方法之前,必须调用it.hasNext()进行检测。如果不调用,下一条记录无效,直接调用它. next()会抛出NoSuchElementException异常。

  

2. Iterator接口的方法

 

  00-1010//hasnext () :判断是否有下一个元素while(iterator . has next()){//next()3360下移指针下移至system . out . println(iterator . next())后返回设定位置的元素;}

  迭代器iterator=coll.iterator()执行时00-1010;语句,迭代器的指针执行下图标记的位置,然后执行iterator.hasNext()语句。此时会判断迭代器指针所指位置的下一个位置()是否有元素。如果有,则返回true,否则返回false。当返回结果为真时,向下执行iterator.next()语句,此时迭代器的指针下移,返回下移后指针所指向的设定位置的元素。

  

3. 迭代器的执行原理

 

  

3.1 代码演示

迭代器ITER=coll . Iterator();//回到起点while(ITER . has next()){ object obj=ITER . next();if(obj . equals( Tom ){ ITER . remove();} }

 

  

3.2 代码执行过程解析

迭代器可以删除一个集合的元素,但是是通过遍历时迭代器对象的remove方法,而不是set对象的remove方法。

 

  如果next没有被调用(

  )或在上一次调用 next() 方法之后已经调用了 remove 方法,再调用remove都会报IllegalStateException异常。

  

 

  

5. 代码演示

 @Test public void test1(){ Collection coll = new ArrayList(); coll.add(123); coll.add(456); coll.add(new Person("Jerry",20)); coll.add(new String("Tom")); coll.add(false); Iterator iterator = coll.iterator(); //方式一:// System.out.println(iterator.next());// System.out.println(iterator.next());// System.out.println(iterator.next());// System.out.println(iterator.next());// System.out.println(iterator.next());// //报异常:NoSuchElementException// System.out.println(iterator.next()); //方式二:不推荐// for(int i = 0;i < coll.size();i++){// System.out.println(iterator.next());// } //方式三:推荐 hasNext():判断是否还有下一个元素 while(iterator.hasNext()){ //next():①指针下移 ②将下移以后集合位置上的元素返回 System.out.println(iterator.next()); } }
 @Test public void test2(){ Collection coll = new ArrayList(); coll.add(123); coll.add(456); coll.add(new Person("Jerry",20)); coll.add(new String("Tom")); coll.add(false); //错误方式一:// Iterator iterator = coll.iterator();// while((iterator.next()) != null){// System.out.println(iterator.next());// } //错误方式二: //集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。 while (coll.iterator().hasNext()){ System.out.println(coll.iterator().next()); } } //测试Iterator中的remove() //如果还未调用next()或在上一次调用 next 方法之后已经调用了 remove 方法, // 再调用remove都会报IllegalStateException。
 @Test public void test3(){ Collection coll = new ArrayList(); coll.add(123); coll.add(456); coll.add(new Person("Jerry",20)); coll.add(new String("Tom")); coll.add(false); //删除集合中"Tom" Iterator iterator = coll.iterator(); while (iterator.hasNext()){// iterator.remove(); Object obj = iterator.next(); if("Tom".equals(obj)){ iterator.remove();// iterator.remove(); } } //遍历集合 iterator = coll.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } }

 

  

二、foreach 循环

 

  

1. 概述

Java 5.0 提供了 foreach 循环迭代访问 Collection和数组。

 

  遍历操作不需获取Collection或数组的长度,无需使用索引访问元素。

  遍历集合的底层调用Iterator完成操作。

  foreach还可以用来遍历数组。

  

 

  

2. 语法解析

 

  

 

  

3. 代码演示

 @Test public void test1(){ Collection coll = new ArrayList(); coll.add(123); coll.add(456); coll.add(new Person("Jerry",20)); coll.add(new String("Tom")); coll.add(false); //for(集合元素的类型 局部变量 : 集合对象) //内部仍然调用了迭代器。 for(Object obj : coll){ System.out.println(obj); } //123 //456 //Person@621be5d1 //Tom //false }
 @Test public void test2(){ int[] arr = new int[]{1,2,3,4,5,6}; //for(数组元素的类型 局部变量 : 数组对象) for(int i : arr){ System.out.println(i); } //1 //2 //3 //4 //5 //6 }

 

  

4. 易错题

public class test { public static void main(String[] args) { String[] str = new String[5]; for (String myStr : str) { myStr = "小老师ir"; System.out.println(myStr); } //小老师ir //小老师ir //小老师ir //小老师ir //小老师ir for (int i = 0; i < str.length; i++) { System.out.println(str[i]); } //null //null //null //null //null }}

到此这篇关于Java深入分析Iterator迭代器与foreach循环的使用的文章就介绍到这了,更多相关Java Iterator迭代器内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • shell中for循环语句,shell脚本中的for循环
  • shell中for循环语句,shell脚本中的for循环,shell中的for循环用法详解
  • js中for循环语句,js中for循环的两种语法
  • js中for循环语句,for循环语句js,JS中for循环的四种写法示例(入门级)
  • dos批处理命令操作,批处理命令循环语句,DOS 批处理命令For循环命令详解
  • c语言for循环语句用法,c语言中for循环语句详解
  • c语言for循环语句用法,c语言中for循环语句详解,C语言示例讲解for循环的用法
  • java中增强型for循环作用,java增强for循环的语法结构
  • java中增强型for循环作用,java增强for循环的语法结构,java增强for循环的实现方法
  • for循环打印菱形的程序框图,javafor循环输出菱形
  • for循环打印菱形的程序框图,javafor循环输出菱形,Java利用for循环打印菱形的实例教程
  • python for循环跳过,跳出多层for循环
  • python for循环跳过,跳出多层for循环,python跳出双层for循环的解决方法
  • python for 迭代器,迭代器和for循环
  • python for循环递减,python for 数组
  • 留言与评论(共有 条评论)
       
    验证码: