使对象可以像数组一样进行foreach循环,要求属性必须是私有。
<?php
class MyIterator implements Iterator
{
private $var = array();
public function __construct($array)
{
if (is_array($array)) {
$this->var = $array;
}
}
public function rewind() {
echo "rewinding\n";
reset($this->var);
}
public function current() {
$var = current($this->var);
echo "current: $var\n";
return $var;
}
public function key() {
$var = key($this->var);
echo "key: $var\n";
return $var;
}
public function next() {
$var = next($this->var);
echo "next: $var\n";
return $var;
}
public function valid() {
$var = $this->current() !== false;
echo "valid: {$var}\n";
return $var;
}
}
$values = array(1,2,3);
$it = new MyIterator($values);
foreach ($it as $a => $b) {
print "$a: $b\n";
}
/*
输出:
rewinding
current: 1
valid: 1
current: 1
key: 0
0: 1
next: 2
current: 2
valid: 1
current: 2
key: 1
1: 2
next: 3
current: 3
valid: 1
current: 3
key: 2
2: 3
next:
current:
valid:
*/
?>
迭代器有一个简单的和经常被看到的接口
<?php
function Iterator($array) // Constructor. Takes array to be traversed as a parameter. 构造函数。
使需要遍历的数组作为一个参数
function reset() // Sets internal pointer to the first element 设置内部指针指向第一个元素
function end() // Sets internal pointer to the last element 设置内部指针指向最后一个元素
function seek($position) // Sets internal pointer to desired position 设置内部指针指向一个指定的元素
function next() // Returns next element in the iteration 返回后一个元素
function previous() // Returns previous element in the iteration 返回前一个元素
?>
分享到:
相关推荐
Java Iterator接口实现代码解析 Java Iterator接口是Java集合框架中的一部分,它提供了对集合元素的遍历和操作功能。Iterator接口的主要方法包括hasNext()、next()和remove(),它们分别用于判断是否还有更多元素、...
需要注意的是,Iterator接口和ListIterator接口的实现需要遵循一定的规则,例如,Iterator接口的实现需要遵循Fail-Fast策略,即,如果集合在迭代期间被修改,将抛出ConcurrentModificationException异常。...
模拟ArrayList的Iterator实现,我们需要创建一个内部类,实现Iterator接口。这个内部类需要维护一个指向ArrayList实际元素的指针,以便于在迭代过程中跟踪当前位置。以下是一个简单的模拟实现: ```java public ...
Iterator 接口隐藏了各种 Collection 实现类的底层细节,向应用程序提供了遍历 Collection 集合元素的统一编程接口。 Iterator 接口定义了三个方法:boolean hasNext()、Object next() 和 void remove()。hasNext()...
在本文中,我们将详细介绍Java Iterator接口和ListIterator接口的定义、方法、实现和应用场景。 Iterator接口 Iterator接口是Java集合框架中的一个基本接口,用于迭代集合中的元素。它取代了Java集合框架中的...
课后练习通常会要求利用类(class)封装面向对象的轮播图,这可能涉及到创建一个Carousel类,其中包含表示图片数组的成员变量以及实现Iterator接口的方法。例如: ```javascript class Carousel { constructor...
Iterator接口包含以下五个抽象方法,这些方法必须在实现Iterator接口的类中被定义: 1. `current()`:返回当前索引游标所指向的元素值。这个方法在foreach循环中用于获取当前元素的值。 2. `key()`:返回当前索引...
自定义Iterator迭代器需要实现Iterator接口,并重写hasNext()、next()和remove()方法。例如: public class Gys<T> { private final static int default_capacity = 10; private int endIndex = 0; private ...
2. Java为什么不直接实现Iterator接口,而是实现Iterable? Java设计中,Collection类通常实现Iterable接口,而不是直接实现Iterator接口。这是因为Iterator接口中的next()和hasNext()方法依赖于迭代器的内部状态,...
迭代器其实就是集合的内部类(该类实现 Iterator 接口)。迭代器类内部主要功能函数——判断有没有元素,取出元素。 类集中主要用到的接口 * List<E> 接口:元素可以重复,存入元素的顺序与取出元素的顺序一致。...
所谓Iterator模式,即是...3.定义一个ArrayList,实现Collection接口,并写一个实现了Iterator接口的内部类。 4.编写测试程序TestMain 从以上可以看出,设计模式到处用到面向对象中的多态。接口调用子类中的函数
2. **ConcreteIterator(具体迭代器)**:实现Iterator接口,同时维护一个指向聚合对象中当前元素的指针,以便进行遍历。 3. **Aggregate(聚合)**:定义创建相应迭代器的接口。 4. **ConcreteAggregate(具体聚合...
2. **迭代器(Iterator)**:迭代器对象实现了访问聚合对象元素的接口。它有一个指针,可以移动到聚合中的下一个元素。C++标准库中的迭代器通常提供`begin()`和`end()`函数,分别返回指向聚合开始和结束的迭代器。 3....
如果需要遍历对象的所有属性,包括protected和private属性,我们必须让对象的类实现Iterator接口。 在上述示例代码中,定义了一个Team类,它实现了Iterator接口。Team类内部包含了数组info来存储属性值。在__...
1. 使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态) 2. 使用Iterator接口中的方法hasNext判断还有没有下一个元素 3. 使用Iterator接口中的方法next取出集合中的下一个元素 代码...
在 Java 语言中,迭代器模式可以通过实现 Iterator 接口来实现,该接口提供了 hasNext()、next() 等方法来访问和遍历聚合元素。 代码示例: ```java interface Aggregate { void add(Object obj); void remove...
- `ConcreteIterator`:实现了Iterator接口,用于实际的迭代过程。 - `Aggregate`:表示容器,提供创建Iterator的方法。 #### Iterator的规范 在C++的STL中,所有的迭代器必须遵循一套规范,这包括: - 对象的...
- **实现**:在具体编程语言中,如Java,可以实现Iterator接口并定义相应的方法。 - **相关模式**:如访问者模式,它们都涉及到对象结构的遍历,但访问者模式更关注在遍历过程中执行操作。 在实际应用中,迭代器...
- 实现Iterator接口,重写hasNext()和next()方法,管理迭代状态和索引。 通过理解这些核心概念和差异,你将能够在面试中更自信地回答关于Java集合框架的问题,并在实际开发中更加灵活地运用这些工具。记住,不断...