一、Iterator接口
1、集合有很多种,存储的数据类型不同,那么取出的方式也不同,但是有了迭代器就可以都取出来
2、迭代:即Collection集合元素的通用获取方式。在取元素之前要判断集合中有没有元素,如果有,那就取出来,继续再判断。如果还有就再取出来,一直把集合中的所有元素全部取出。这种取出方式叫做迭代
3、java.util.Iterator接口:迭代器(对集合进行遍历)
有两个常用的方法:
boolean hasNext():如果仍有元素可以迭代,则返回true;判断集合中还有没有下一个元素,有就返回true,没有就返回false;
E next();返回迭代的下一个元素,也就是取出下一个元素
4、Iterator迭代接口中的方法hasNext器是一个接口,无法直接使用,需要使用Iterator的实现类对象,获取实现类的方式比较特殊。 Collection接口中有一个方法叫做Iterator(),这个方法返回的就是迭代器的实现类对象。
5、迭代器的使用步骤:
1、使用集合中的方法Iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
注意:Iterator<E>接口是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型
2、使用Iterator接口中的方法hasNext判断还有没有下一个元素
3、使用Iterator接口中的方法next取出
二、迭代器的代码实现
package com.company;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/**
* ClassName:DemoIterator
* Package:java
* Description:
*
* @Date:2020/2/20 19:23
* @Author:nana
*/
public class Main {
public static void main(String[] args) {
// 首先就创建一个集合,并添加元素
Collection<String > coll =new ArrayList<>();
coll.add("spring");
coll.add("summer");
coll.add("fall");
coll.add("winter");
/*
1、使用集合中的方法Iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
注意:Iterator<E>接口是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型
2、使用Iterator接口中的方法hasNext判断还有没有下一个元素
3、使用Iterator接口中的方法next取出
*/
Iterator<String> a=coll.iterator();
/*
由于不知道集合中具体有多少元素,所以不方便使用for循环
这里利用while循环来输出
* */
while(a.hasNext()){
System.out.println(a.next());
}
}
}
三、迭代器的实现原理
获取迭代器的实现类对象,并且会把指针指向集合的索引。hasnext判断集合中还有没有下一个元素,next做两件事情:1、取出下一个元素2、会把指针向后移动一位。
四、增强for循环
1、增强for循环(也成for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的,它的内部原理其实是个Iterator迭代器,所以在遍历过程中,不能对集合中的元素进行增删操作。
2、增强for循环:底层使用的也是迭代器,使用for循环的格式,简化了迭代器的书写。
所有的单列集合都可以使用增强for循环
增强for循环就是用来遍历集合和数组
3、格式
for(集合或者是数组的数组类型 变量名:集合名/数组名){
sout(变量名)
}
4、代码演示
package com.company;
import java.util.ArrayList;
/**
* ClassName:Foreach
* Package:com.company
* Description:
*
* @Date:2020/2/20 20:00
* @Author:nana
*/
public class Foreach {
public static void main(String[] args) {
demo1();
demo2();
}
//使用增强for循环遍历数组
private static void demo2() {
int[] arr={1,2,3,4};
for(int i:arr){
System.out.println(i);
}
}
//使用增强for循环遍历集合
private static void demo1() {
ArrayList<String> list=new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
for(String s:list){
System.out.println(s);
}
}
}