Java中迭代器

时间:2022-07-04 02:59:48

任何容器类,都必须有某种方法可以插入元素并将它们再次取回,毕竟,持有事物是容器最基本的工作,对于List,add()是出入元素的方法之一,而get()是取出元素
的方法之一。
如果从更高层的角度思考,会发现这里有个缺点:要使用容器,必须对容器的确切类型编程,

【要操作List,你就必须知道操作的是List,那么必须提供对List的操作方法,该方法即对List进行编程】初看起来这没什么不好,但是考虑到下面的情况:如果原本是对着List编码的,但是后来发现如果能够把相同的代码应用到Set,将会显得非常方便,此时应该怎么做?或者打算从头开始编写通用的代码,他们只是使用容器,不知道或者不关心容器
的类型,那么如何才能不重写代码就可以应用于不同类型的容器?
迭代器(也是一种设计模式)的概念可以用于达成此目的,迭代器是一个对象,它的工作是遍历并选中序列中的对象,而客户端程序员不必知道或关心该序列底层的结构,此外,迭代器被称为轻量级对象,创建它的代价小,因此,经常可以见到对迭代器的有些奇怪限制;

例如,java中的Iterator只能单向移动,这个Iterator只能用来:
1.使用方法iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素。
2.使用next()获得序列中的下一个元素。
3.使用hasNext()检查序列中是否还有元素。
4.使用remove()将迭代器新返回的元素删除。

有了Iterator就不必为容器中元素的数量操心了,那是由hasNext()和next()关心的事情。
如果你只是向前遍历List,并不打算修改List对象本身,那么你可以看到foreach()语法会显得更加简洁。
Iterator还可以移除由next()产生的最后一个元素,这意味着在调用remove()之前必须先调用next().

接受对象容器并传递它,从而在每个对象上都执行操作,这种思想十分强大,并且贯穿于整个Java。