Iterator迭代器
1、概述
迭代器是对 Iterator 的称呼,专名用来对Collection集合进行遍历使用的。学习迭代器的目的就是为了遍历结合
2、迭代器相关API
public interface Collection<E> extends Iterable<E> { //继承Iterable
@NotNull
Iterator<E> iterator();
}
// Collection继承Iterable,继承了Iterable的功能,表示有迭代的能力。所有子类型都有迭代的能力。
public interface Iterable<T> {
Iterator<T> iterator();
}
//通过Iterable提供的方法可以获取迭代器
public interface Iterator<E> { //迭代器
boolean hasNext();
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
}
迭代器 = 集合.iterator();
Iterator接口的常用方法如下:
public E next()
:返回迭代的下一个元素。并把指针往后移动一位public boolean hasNext()
:如果仍有元素可以迭代,则返回 true。
default void remove()
: 从底层集合中删除此迭代器返回的最后一个元素
3、注意事项:
-
在进行集合元素获取时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会抛出java.util.NoSuchElementException 没有集合元素异常。
-
在进行集合元素获取时,如果添加或移除集合中的元素 , 将无法继续迭代 , 将会抛出ConcurrentModificationException并发修改异常.
产生的原因:我们使用迭代器遍历集合,但是采用了集合对象修改了集合的长度(添加,修改)
解决:使用迭代器遍历,迭代器修改集合长度
-
Iterator有个子接口 ListIterator,ListIterator列表迭代器只能遍历list体系
4、增强for
4.1 增强for循环介绍
增强for循环,专门用来遍历集合或者数组,底层实现迭代器
好处:简化集合和数组的遍历
缺点:没有索引
4.2 格式定义
for(变量类型 变量名 : 数组/集合){
变量名代表的就是集合或者数组的元素
}
【代码演示】
public class NBForDemo1 {
public static void main(String[] args) {
int[] arr = {3,5,6,87};
//使用增强for遍历数组
for(int a : arr){//a代表数组中的每个元素
System.out.println(a);
}
Collection<String> coll = new ArrayList<String>();
coll.add("小河神");
coll.add("老河神");
coll.add("神婆");
for(String s :coll){
System.out.println(s);
}
}
}
tips:
增强for循环必须有被遍历的目标,目标只能是Collection或者是数组;
增强for(迭代器)仅仅作为遍历操作出现,不能对集合进行增删元素操作,否则抛出ConcurrentModificationException并发修改异常
分类: java