什么是迭代器iterator
迭代器(Iterator)
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。
迭代器通常被称为“轻量级”对象,因为创建它的代价小。Java中的Iterator功能比较简单,并且只能单向移动:
(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。
注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
在java中集合中迭代是怎么一回事儿?为什么要进行集合的迭代
其实严格来说,迭代是一种设计模式,迭代的目的是遍历某一类数据集合的内容,而无需了解该类数据的数据结构。
其实现思路是:定义一个迭代器接口,该接口至少声明两个方法,分别是:hasNext(),和next()。通过hasNext()判断是否还有可遍历元素,通过next()返回可遍历元素。至于具体实现则根据不同需求创建不同实现类即可。
也就是说,迭代本没有编程语言属性,只不过几乎所有的编程语言都会支持迭代罢了。
在Java中遍历集合可以不用迭代方式,当然,不用迭代方式的遍历仅限于List接口的实现类。因为List接口规定可以通过集合索引来取得对应的值,不论这个List用的是数组还是链表实现。
但是,Java中的集合不仅仅只有List,还有Set。像这种非List集合是无法通过索引来获取指定元素的,所以这时候迭代方式就排上了用场。
除了List和Set之外,Java还有一种双列集合,又称key-value键值对集合。只不过这种集合遍历时无法直接通过迭代方式遍历。而是通过折中方式,要么先获得key值集合,通过遍历key来遍历map,要么是获得Map.Entry的集合来遍历。
总之,迭代方式不属于任何编程语言,它只是一种设计思想,只不过大多数编程语言会去实现它罢了,包括Java。
迭代可以遍历并选择集合中的每个对象而不改变集合的结构,比如你访问集合的时候用集合自带的remove()方法去除集合的元素,这样会是使集合的Size()改变,循环的时候会出错;而把集合放入迭代器,用迭代器的remove()就不会出现问题
如何使用C++中的iterator
Java中的Iterator功能比较简单并且只能单向移动:使用方法iterator()要求容器返回一个Iterator。
第一次调用Iterator的next()方法时它返回序列的第一个元素。使用next()获得序列中的下一个元素。
使用hasNext()检查序列中是否还有元素。
使用remove()将迭代器新返回的元素删除。 这里举一个例子 Collection c = map.values(); Iterator it = c.iterator(); for (; it.hasNext();) { System.out.println(it.next()); }