Iterator迭代器
一、什么是迭代器?
Iterator是一个Collection集合元素的通用获取方式。再取出元素之前先判断集合中有没有元素,如果有,就把这个元素取出来,然后再继续判断。一直把集合中的所有元素都取出来。这种取出方式专业术语称为迭代、
Iterator接口常用的方法如下:
- E Next():返回迭代的下一个元素。
- boolean hasNext():如果仍有元素可以迭代,则返回true。
Iterator迭代器是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊,Collection接口中有一个Iterator(),这个方法返回的就是迭代器的实现类对象。
二、迭代器使用步骤(重要)
- 使用集合中的方法iterator()获取迭代器的实现对象,使用Iterator接口接收(多态)
- 使用Iterator接口中的方法hasNext判断还有没有下一个元素
- 使用Iterator接口中的方法next取出集合中的下一个元素
1.代码实现
(示例):
//创建一个集合
Collection<String> coll = new ArrayList<>();
coll.add("张三");
coll.add("李四");
coll.add("赵四");
coll.add("王五");
/* 第一步:获取一个迭代器
注意:Iterator接口也是有泛型的,集合是什么泛型,迭代器就是什么泛型。*/
Iterator<String> it = coll.iterator();
/*第二步:判断*/
boolean b1=it.hasNext();
System.out.println(b1);
/*第三步:取出下一个元素*/
String s = it.next();
System.out.println(s);
随后我们可以看到结果
true
张三
然后我们补全所有的迭代数据
:
b1=it.hasNext();
System.out.println(b1);
s = it.next();
System.out.println(s);
b1=it.hasNext();
System.out.println(b1);
s = it.next();
System.out.println(s);
b1=it.hasNext();
System.out.println(b1);
s = it.next();
System.out.println(s);
可以看到结果 集合都打印了出来
true
张三
true
李四
true
赵四
true
王五
而如果集合中没有元素,我们继续进行迭代,则会在判断是报出 False,若继续输出下一个元素,则会抛出异常 Exception in thread “main” java.util.NoSuchElementException
2.循环优化
我们可以看到迭代器取出元素的代码是一个重复的过程,那么我们可以使用循环优化。
- 不知道集合中有多少元素:使用while循环 循环结束的条件:hasNext方法返回false
:
while (it.hasNext()){
String e = it.next();
System.out.println(e);
}
我们可以看到结果:
张三
李四
赵四
王五
三、迭代器的实现原理
根据上面的简单说明,我们可以看到,当集合存在时:
通过第一步
Iterator<String> it = coll.iterator();
coll.iterator()获取迭代器的实现类对象,并且会把指针(索引)引向集合的-1索引
第二步进行hasNext()判断集合中还有没有下一个元素,有的话进入Next()
而在其中,总共做了两件事情:
1.取出下一个元素: 1.张三 2.李四 3.王五 4.赵四
2.把指针往后移动一位:索引 -1 0 1 2 3
而当最后没有元素时,整个迭代过程也就结束了。