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、注意事项:

  1. 在进行集合元素获取时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会抛出java.util.NoSuchElementException 没有集合元素异常

  2. 在进行集合元素获取时,如果添加或移除集合中的元素 , 将无法继续迭代 , 将会抛出ConcurrentModificationException并发修改异常.

    产生的原因:我们使用迭代器遍历集合,但是采用了集合对象修改了集合的长度(添加,修改)

    解决:使用迭代器遍历,迭代器修改集合长度

  3. 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