java中迭代器原理_Java中集合遍历Iterator迭代器执行原理 迭代器模式 foreach 增强for循环...

1、Iterator迭代器

用来遍历Colletioon接口实现的集合,返回Iterator接口的实例。

①Iterator迭代器:专门用来遍历List、Set接口实现的集合,它不是一个容器,是Colletion接口中的一个遍历集合的方法,相当于火车上的乘务员的检票过程;

②迭代器模式:提供一种方法访问一个容器(container)对象中各个元素,而不需要暴露该对象的内部细节。迭代器模式,可以说是专门为集合而生;

③集合对象每次调用iterator()都得到一个全新的的迭代器对象,默认游标都在集合的第一元素之前,下面有图示;

④内部有三个常见方法,hasNext() :判断当前集合里还有没有元素可有进行遍历;next() : 用来遍历打印集合中的元素;remove() : 可以在遍历到指定的元素时进行移除指定的元素,要注意的是在调用remove()时,一定要先调用next()方法,先让指针(游标)下移到元素上。

0b430e73fd59cf59a519cf8fbb2a9ba0.png

2、开发中推荐使用方式

Iterator iterator= coll.iterator();//coll为集合对象

while(iterator.hasNext()) {

// next():①指针下移;②将下移以后集合位置上的元素返回。

System.out.println (iterator.next());

}

3、错误使用方式

1)错误方式一,没有调用hasNext()

输出方式为:打印一个元素后跳一个元素不打印,再去打印下一个,就是去移动指针了,但没有去打印。并会报java.util.NoSunchElementException

Iterator iterator= coll.iterator();//coll为集合对象

while((iterator.next()) != null) {

System.out.println (iterator.next());

}

2)错误方式二,没有在while外去创建iterator对象

输出方式:会循环输出集合中第一个元素,死循环,原因是每次都会去创建一个新的iterator对象,而iterator的游标初始还是在第一个元素之前,next就是第一个元素,就打印第一个元素。

while(coll.iterator().hasNext()) {

System.out.println (iterator.next());

}

4、Iterator迭代器中remove()方法

Iterator iterator = coll.iterator(); //coll是一个集合对象

while(iterator.hasNext()) {

object obj = iterator.next();

if ("hello".equals(obj)) {

iterator.remove();

}

}

5、利用迭代器实现的增强for循环遍历或者说foreach遍历

1)、作用 :增强for循环是用来遍历数组(包括一维数组和二位数组)、集合。

2)、格式:

for (数组或集合元素类型 局部变量名 :数组或集合对象名) {

... //代码

}

3)、注意点:

这种遍历方式是在底层重新创建了一个数组或者集合,遍历过程中不会对原数组或者集合进行修改数据。

4)、代码演示:

import java.util.ArrayList;

public class Test1 {

public static void main(String[] args) {

int[][] arr = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}};

for (int[] arr1 : arr) { //foreach遍历二位数组

for (int i : arr1) {

System.out.print(i + " ");

}

System.out.println();

}

System.out.println("");

ArrayList list = new ArrayList<>();

list.add(1);

list.add(2);

list.add(3);

list.add(4);

for (Integer integer : list) { //foreach遍历集合

System.out.print(integer + " "); //不换行输出

}

}

}

打印结果:

1 2 3

1 2 3

1 2 3

---------

1 2 3 4

有用点个关注,手留余香! 😗 😗 😗

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值