(1)迭代器并非是容器,它的功能是遍历容器。
(2)要想遍历,必须知道容器的确切类型,然后编码进行遍历,不同的容器有不同的遍历方式,但是如果使用迭代器的话,就不需要知道容器的类型,因为可以用一种方式遍历容器中的对象
一、Iterator接口
1、
(1)集合是对Collection接口进行遍历,这个接口中,有Iterator方法,所以实现Collection接口的容器都有一个iterator方法
(2)
- 有没有下一个元素
- 取下一个元素
- 边遍历删除元素
2、实例1(输出,但是不删除)
(1)用的是HashSet接口类型的,然后添加对象,进行遍历。
(2)c.iteartor
,c中的有iteartor方法,但是动态绑定,调用的是HashSet中的iterator方法,返回值就是一个对象的引用,这个对象实现了对HashSet的遍历,是对HashSet进行遍历的迭代器,这个对象的类型和类名是什么不知道,但是一定实现了Iterator接口。
(3)通过c进行遍历,如果有下一个元素的话,取下一个元素,进行遍历。
(4)这种迭代器只能前移,不能后移,因为,迭代器刚返回的时候,指向第一个元素之前,所以要访问第一个元素,先得next,之后前移获得第一个元素,再next,之后前移获得第二个元素,依次类推。
3、实例2(边遍历边删除)
(1)删除的时候,为什么不用容器删除呢?而是用Iterator中的remove方法呢?因为,容器在遍历的时候,有索引,删除对象的话,有影响,保证不了正确性。
4、新增for循环
(1)通过编译器优化,自动将arr中的值从0开始,逐渐赋值给i,然后打印出来