往事悠悠君莫问,回头。槛外长江空自流。
——王安石《南乡子》
## Java集合基础之Iterator迭代器1. Iterator 接口
在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口
java.util.Iterator
。
Iterator
接口也是Java集合中的一员,但它与Collection
、Map
接口有所不同,Collection接口与
Map接口主要用于存储元素,而
Iterator主要用于迭代访问(即遍历)
Collection中的元素,因此
Iterator对象也被称为迭代器。想要遍历
Collection
集合,那么就要获取该集合迭代器完成迭代操作,下面介绍一下获取迭代器的方法:// 获取集合对应的迭代器,用来遍历集合中的元素的。 // Collection接口中的抽象方法 Iterator<E> iterator(); // 可以通过list.iterator()拿到list集合对应的迭代器。 <!--0-->
使用Iterator迭代集合中元素:
1 | public class TestIterator { |
在进行集合元素取出时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会发生
java.util.NoSuchElementException没有集合元素的错误
。
2. 迭代器的实现原理
我们在之前案例已经完成了Iterator遍历集合的整个过程。当遍历集合时,首先通过调用集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。
Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,通过一个图例来演示Iterator对象迭代元素的过程:
在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。
3. 增强for循环
增强for循环(也称for each循环
)是 JDK1.5 以后出来的一个高级for循环,专门用来遍历数组和集合的
。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作
。
增强for循环遍历数组和集合
1 | public class TestFor { |
- 目标只能是Collection或者是数组。
- 增强for循环仅仅作为遍历操作出现。