zoukankan      html  css  js  c++  java
  • 迭代器(Iterator)详解

    本篇文章将对迭代器(Iterator)从四个方面进行详解。

    1. 是什么

    迭代器(Iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址[1]

    通俗点说,迭代器表现的像指针,读取集合或者数组中的一个值,读完以后又指向下一条数据,一个个数过去。

    2. 为什么

    我们知道,数据容器很多,有数组、链表、树等等,对数据容器中的元素进行遍历也对应的有各自的方法。设想一下,如果我们要为数组和集合设计查找算法,因为找下一个元素在数组和集合中的操作不同,只是为了查找。核心思想是寻找下一个元素,但要实现两套不同的代码,显然这是不优秀的。

    有了迭代器,我们可以将算法和特定的容器分离开来。它可以遍历并选择序列中的对象,而我们不需要了解该序列的底层结构。也就是说功能代码我们只需要实现一套就行。比如要实现查找,那么代码实现后只要对迭代器适用就行了,不用考虑不同的容器之间你的功能代码的底层实现。

    3.怎么用

    迭代器的类型有很多,譬如单向、双向等等。但核心功能是差不多的,当需要追求某一特定容器时可选用更特殊的迭代器。

    例如Java 中的Iterator ,功能比较简单,并且只能单向移动:

        (1) 使用方法iterator() 要求容器返回一个Iterator 。第一次调用Iterator 的next() 方法时,它返回序列的第一个元素。注意:iterator() 方法是java.lang.Iterable 接口,被 Collection 继承。

        (2) 使用next() 获得序列中的下一个元素。

        (3) 使用hasNext() 检查序列中是否还有元素。

        (4) 使用remove() 将迭代器新返回的元素删除。

    Iterator 是 Java 迭代器最简单的实现,为 List设计的 ListIterator 具有更多的功能,它可以从两个方向遍历List ,也可以从List 中插入和删除元素。

    4.注意

    1.在迭代器迭代元素的过程中,不允许使用集合对象改变集合中的元素个数,如果需要添加或者删除只能使用迭代器的方法操作。

    2.如果使用了集合对象改变集合中的元素个数那么就会报错:不改变个数即可,替换也可以的。

    3.迭代器的生存周期为创建到使用结束的时段。

    4. foreach : Iterator 的封装变形,变得比 Iterator更简单。但是他也需要知道数组或集合的类型。并且,Iterator 需要注意的,foreach 同样需要注意。

    参考资料:

    [1] https://baike.baidu.com/item/%E8%BF%AD%E4%BB%A3%E5%99%A8/3803342?fr=aladdin迭代器_百度百科

  • 相关阅读:
    POJ 2175 Evacuation Plan 费用流 负圈定理
    POJ 2983 Is the Information Reliable? 差分约束
    codeforces 420B Online Meeting
    POJ 3181 Dollar Dayz DP
    POJ Ant Counting DP
    POJ 1742 Coins DP 01背包
    中国儒学史
    产品思维30讲
    Java多线程编程核心技术
    编写高质量代码:改善Java程序的151个建议
  • 原文地址:https://www.cnblogs.com/Sherlock-J/p/12925995.html
Copyright © 2011-2022 走看看