iterator
什么是集合(Collection)?集合就是“由若干个确定的元素所构成的整体”。例如,5只小兔构成的集合: 在数学中,我们经常遇到集合的概念。例如: 为什么要在计算机中引入集合呢?这是为了便于处理一组类似的数据,例如: 在Java中,如果一个Java对象可以在内部持有若干其他Java对象,并对外提供访问接口,我们把这种Java对象称为集合
Python中有一个非常有用的语法叫做生成器,用到的关键字就是yield。yield的作用是把一个函数变成生成器(generator),起到一个延迟的作用。 带有yield的函数在Python中被称之为generator(生成器),也就是说,当你调用这个函数的时候,函数内部的代码并不立即执行 ,这个函数只是返回一个生成器(Generator Iterator)
对于遍历集合元素, Kotlin 标准库支持 迭代器 的常用机制——对象可按顺序提供对元素的访问权限,而不会暴露集合的底层结构。 当需要逐个处理集合的所有元素(例如打印值或对其进行类似更新)时,迭代器非常有用。 Iterable 接口的继承者(包括 Set 与 List)可以通过调用 iterator() 函数获得迭代器
什么是集合(Collection)?集合就是“由若干个确定的元素所构成的整体”。例如,5只小兔构成的集合: 在数学中,我们经常遇到集合的概念。例如: 为什么要在计算机中引入集合呢?这是为了便于处理一组类似的数据,例如: 在Java中,如果一个Java对象可以在内部持有若干其他Java对象,并对外提供访问接口,我们把这种Java对象称为集合
迭代器模式(Iterator Pattern)是一种行为型设计模式,它允许客户端代码逐步访问集合对象中的元素,而不需要了解底层的实现细节。 在PHP中,可以使用内置的Iterator接口来实现迭代器模式。以下是一个使用迭代器模式的示例: 在上面的示例中,我们定义了一个MyCollection类,它实现了PHP的Iterator接口
对于遍历集合元素, Kotlin 标准库支持 迭代器 的常用机制——对象可按顺序提供对元素的访问权限,而不会暴露集合的底层结构。 当需要逐个处理集合的所有元素(例如打印值或对其进行类似更新)时,迭代器非常有用。 Iterable 接口的继承者(包括 Set 与 List)可以通过调用 iterator() 函数获得迭代器
for需要知道集合或数组的大小,而且需要是有序的,不然无法遍历; foreach和iterator都不需要知道集合或数组的大小,他们都是得到集合内的每个元素然后进行处理; for和foreach都需要先知道集合的类型,甚至是集合内元素的类型,即需要访问内部的成员,不能实现态; iterator是一个接口类型,他不关心集合或者数组的类型,而且他还能随时修改和删除集合的元素,举个例 子:public void display(Iterator it){ 当我们需要遍历不同的集合时,我们只需要传递集合的iterator(如arr.iterator())看懂了吧,这就 是iterator的好处,他不包含任何有关他所遍历的序列的类型信息,能够将遍历序列的操作与序列底层的 结构分离。迭代器统一了对容器的访问方式。这也是接口的解耦的最好体现
两个算法都是稳定排序,传入的iterator类型不一样。有什么特殊说法吗?两个得到的结果一样! 一个是merge,一个是sort。这个我当然明白,还是没说到重点
迭代器模式(Iterator Pattern)是一种设计模式,它可以让我们遍历一个聚合对象的元素而无需暴露其内部实现。迭代器模式提供了一种方式来顺序访问一个聚合对象中的各个元素,而不暴露聚合对象的内部实现细节。 在 Go 语言中,可以通过定义一个 Iterator 接口来实现迭代器模式
上面廖老师的文章里写到,一般数据集合类型list、set、dict、str都可用于for循环,但是for循环的本质是不断调用next()函数,而能够调用next()函数的对象,都可以被称为是迭代器对象,但是廖老师之前已经声明过,上面提到的list、dict等不是迭代器对象,所以从本质上看都是通过next()函数下一个元素,但是迭代器对象能够直接被next()函数调用,而可迭代对象却不行么?写到这里,还想到了一个点,可迭代对象中的元素都是存放在内存中,都是有限的,而迭代器的对象本质上可以不包含元素,而是通过next()来不断获取。 list、set、dict、str这些都是可迭代对象,老师说用for遍历实际上是调用next()函数,这个指的是先用iter()将这些可迭代对象变成迭代器之后,再调用next()函数,所以前后并不矛盾。 for循环里面先用iter()函数将这些变为了iterator