美文网首页
数据结构(八) -- 迭代器

数据结构(八) -- 迭代器

作者: 峰峰小 | 来源:发表于2016-10-07 22:06 被阅读118次

一,迭代器

在对向量、列表和序列进行处理(比如,查找某一特定的元素)时,一种典型的操作就是依次访问或修改其中的各个元素。迭代器是软件设计的一种模式,它是对** “逐一访问所有元素” **这类操作的抽象。

迭代器本身也是一个序列S,在任何时候,迭代器中都有唯一的当前元素。迭代器还必须提供某种机制,使得我们可以不断转向S中的下一元素,并将其置为新的当前元素。与前面所介绍的** 位置ADT 相比,迭代器是对前者的扩展与推广。 实际上,一个位置本身已经可以被看作是一个迭代器了,只不过它还不能不断更新。 ** 总之,所谓迭代器,就是对一组对象之间的位置、直接后继等关系的集成。


二,迭代器ADT(AbstractDataType)

操作方法 功能描述
hasNext() 检查迭代器中是否还有剩余的元素
输入:无
输出:布尔标志
getNext() 返回迭代器中的下一元素
输入:无
输出:对象

三,基于列表实现的迭代器

接口:

package dsa.Iterator;

/*
 * 迭代器ADT接口
 */
public interface Iterator {
    boolean hasNext();// 检查迭代器中是否还有剩余的元素

    Object getNext();// 返回迭代器中的下一元素
}

异常:

package dsa.Iterator;

public class ExceptionNoSuchElement extends RuntimeException {

    public ExceptionNoSuchElement(String err) {
        super(err);
    }

}

  • 基于列表实现的位置迭代器:
package dsa.Iterator;

import dsa.List.List;
import other.Position;

/*
 * 基于列表实现的位置迭代器
 */
public class IteratorPosition implements Iterator {
    private List list;// 列表
    private Position nextPosition;// 当前(下一个)位置
    // 默认构造方法

    public IteratorPosition() {
        list = null;
    }

    // 构造方法
    public IteratorPosition(List L) {
        list = L;
        if (list.isEmpty())// 若列表为空,则
            nextPosition = null;// 当前位置置空
        else
            // 否则
            nextPosition = list.first();// 从第一个位置开始
    }

    // 检查迭代器中是否还有剩余的位置
    public boolean hasNext() {
        return (nextPosition != null);
    }

    // 返回迭代器中的下一位置
    public Object getNext() throws ExceptionNoSuchElement {
        if (!hasNext())
            throw new ExceptionNoSuchElement("意外:没有下一位置");
        Position currentPosition = nextPosition;
        if (currentPosition == list.last())// 若已到达尾位置,则
            nextPosition = null;// 不再有下一个位置
        else
            // 否则
            nextPosition = list.getNext(currentPosition);// 转向下一位置
        return currentPosition;
    }
}
  • 基于列表实现的元素迭代器:
package dsa.Iterator;

import other.Position;
import dsa.List.List;

/*
 * 基于列表实现的元素迭代器
 */
public class IteratorElement implements Iterator {
    private List list;// 列表
    private Position nextPosition;// 当前(下一个)元素的位置

    // 默认构造方法

    public IteratorElement() {
        list = null;
    }

    // 构造方法
    public IteratorElement(List L) {
        list = L;
        if (list.isEmpty())// 若列表为空,则
            nextPosition = null;// 当前元素置空
        else
            // 否则
            nextPosition = list.first();// 从第一个元素开始
    }

    // 检查迭代器中是否还有剩余的元素
    public boolean hasNext() {
        return (null != nextPosition);
    }

    // 返回迭代器中的下一元素
    public Object getNext() throws ExceptionNoSuchElement {
        if (!hasNext())
            throw new ExceptionNoSuchElement("意外:没有下一元素");
        Position currentPosition = nextPosition;
        if (currentPosition == list.last())// 若已到达尾元素,则
            nextPosition = null;// 不再有下一元素
        else
            // 否则
            nextPosition = list.getNext(currentPosition);// 转向下一元素
        return currentPosition.getElem();
    }

}

相关文章

  • 数据结构(八) -- 迭代器

    一,迭代器 在对向量、列表和序列进行处理(比如,查找某一特定的元素)时,一种典型的操作就是依次访问或修改其中的各个...

  • 迭代器

    迭代器-生成器 Iterator-Generator 1 迭代器 容器对象 -》数据结构:Array,链表,哈希表...

  • 迭代器和生成器

    迭代器简介 我们之前介绍的各种数据结构都是可迭代对象。可迭代对象可用于for循环等地方(迭代器这部分可以在学习循环...

  • 迭代器

    迭代器的概念 迭代器就是一种接口,为各种不同的数据结构提供统一的访问机制。任何的数据结构只要部署了Inerator...

  • 一篇文章让你吃透Python迭代对象、迭代器、生成器

    在了解Python的数据结构时,容器(container)、可迭代对象(iterable)、迭代器(iterato...

  • Python 迭代对象、迭代器、生成器概念详解

    本文转载地址 在了解Python的数据结构时,容器(container)、可迭代对象(iterable)、迭代器(...

  • 迭代器

    什么是迭代器:(遍历数据结构用的) 迭代器就是对数据结构遍历,如同for循环对数组遍历一样。对各种集合提供一个统一...

  • 8.for of

    for of 使用实例 可以遍历可迭代对象,可迭代对象就是部署了迭代器接口 iterable,很多内置的数据结构提...

  • PHP SPL

    SPL就是标准库包括:迭代器,算法数据结构,堆。

  • JAVA非并发容器--ArrayList, LinkedList

    概述 ArrayList底层数据是数组, LinkedList的数据结构是双向链表, 节点数据结构如下: 迭代器 ...

网友评论

      本文标题:数据结构(八) -- 迭代器

      本文链接:https://www.haomeiwen.com/subject/kiayyttx.html