迭代器原理和使用

一、迭代器

1、说明:

迭代器是访问集合元素的一种方式。迭代器的对象从集合的第一个元素开始访问,直到所有的元素被访问结束。迭代器只能往前不会退后。

不过也没什么,因为人们很少在迭代过程中往后退。另外迭代器一大优点是不要求事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代

到某个元素时才计算该元素,而在这之前或者之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或者无限的集合

,比如几个G的文件。

2、特点:

①访问者不需要关心迭代器内部结构,仅需要通过__next__()方法不断的取下一个内容。

注解:在python2.7中使用的是next(),上面的__next__()是python3.x的使用方法。

②不能随机访问集合中的某个值,只能从头到尾依次访问。

③访问到一半不能往回退。

④便于数据比较大的数据集合,节省内存。

e.g:

时间: 2024-10-25 02:22:28

迭代器原理和使用的相关文章

关于__setitem__,__getitem__,delitem__以及__slots__,迭代器原理,上下文管理协议还有元类

关于__setitem__,__getitem__,delitem__ 类似于以前的学过的__setattr__,__getattr__... 不同之处在于item结尾的是用于对象以字典添加的形势添加,查看和删除属性的时候才会触发,如下例子: class Foo(object): # __slots__=['x','y'] def __setitem__(self, key, value): print('我在写入') self.__dict__[key]=value def __getitem

java 迭代器原理初探

今天学习了迭代器,老师对迭代器的两个方法hasNext()和Next(),做了深入的理解,并且举了一个简单的例子大致模拟了底层的实现,下面我来记录下实现的过程,首先建立了一个 Collection.java 这是模拟的Collection接口 代码如下: package cn.itcast.studyIterator; public interface Collection {    public Object get(int index);    public int size();    p

C++ 迭代器原理、失效和实现

目录 迭代器的使用 迭代器的种类 迭代器的失效 迭代器的实现 1.迭代器的使用 为了提高C++编程的效率,STL中提供了许多容器,包括vector.list.map.set等.有些容器例如vector可以通过脚标索引的方式访问容器里面的数据,但是大部分的容器不能使用这种方式,例如list.map.set.STL中每种容器在实现的时候设计了一个内嵌的iterator类,不同的容器有自己专属的迭代器,使用迭代器来访问容器中的数据.除此之外,通过迭代器,可以将容器和通用算法结合在一起,只要给予算法不同

迭代器Iterator的底层实现原理

第一步:没有接口的迭代器简单实现原理 1 package com.bjsxt.xiaofei; 2 /** 3 * 迭代器底层原理 4 * 方法: 5 * hasNext() 6 * next() 7 * remove() 8 * @ClassName: MyAarryList 9 * @Description: TODO(这里用一句话描述这个类的作用) 10 * @author 尚晓飞 11 * @date 2014-7-29 下午7:06:09 12 * 13 */ 14 public cl

Java基础——集合(二)——迭代器、Map集合

接上篇,<Java基础--集合(一)--集合体系和Collection> 四.迭代器的使用 使用步骤: 1.通过集合对象获取迭代器对象. 2.通过迭代器对象判断. 3.通过迭代器对象获取. 迭代器原理 由于多种集合的数据结构不同,所以存储方式不同,所以,取出方式也不同. 这个时候,我们就把判断和获取功能定义在了一个接口中,将来,遍历哪种集合的时候,只要该集合内部实现这个接口即可. 迭代器源码 public interface Iterator { publicabstract boolean

Redis Scan迭代器遍历操作原理

Redis在2.8.0版本新增了众望所归的scan操作,从此再也不用担心敲入了keys*, 然后举起双手看着键盘等待漫长的系统卡死了··· 命令的官方介绍在这里, 中文版由huangz同学细心翻译了,作者Antirez的介绍在这里:Finally Redis collections are iterable (我又邪恶的想到了之前他那次机器down机的事故了···). 具体的使用参考上面的链接即可,这里大概介绍一下Scan操作的实现原理. Redis的SCAN操作由于其整体的数据设计,无法提供特

Redis Scan迭代器遍历操作原理(二)

续上一篇文章 Redis Scan迭代器遍历操作原理(一)–基础 ,这里着重讲一下dictScan函数的原理,其实也就是redis SCAN操作最有价值(也是最难懂的部分). 关于这个算法的源头,来自于githup这里:Add SCAN command #579,长篇的讨论,确实难懂····建议看看这帖子,antirez 跟pietern 关于这个奇怪算法的讨论··· 这个算法的作者是:Pieter Noordhuis,作者称其为:reverse binary iteration ,不知道我一对

php手册学习的 迭代器 Iterator

<?php #迭代器原理演示 class MyIterator implements Iterator{ #定义一个属性,原来记录执行次数 private $pos; #定义要遍历的数组 private $arr=array( 'first_param', 'secnod_param', 'third_param' ); #定义构造函数 public function __construct(){ $this->pos = 0; } #定义指针置0 rewind public function

Java——Collection集合、迭代器、泛型

集合 ——集合就是java提供的一种容器,可以用来存储多个数据. 集合和数组的区别 数组的长度是固定的.集合的长度是可变的. 数组中存储的是同一类型的元素,可以存储基本数据类型值. 集合存储的都是对象.而且对象的类型可以不一致.在开发中一般当对象多的时候,使用集合进行存储. 接口继承关系与实现 集合类存放于 Java.util 包中,主要有 3 种:set(集).list(列表包含 Queue)和 map(映射). 1. **Collection:**Collection 是集合 List.Se