迭代器的一个关键属性是
迭代器模式允许我们:
- 访问集合的内容而不暴露其内部结构。
究竟是什么意思,内部结构是什么?
答案 0 :(得分:2)
每个数据结构的实现方式都不同。一些结构可能使用链接设计,一些可能由单个阵列支持,或者可能存在两者的混合。想象一下,如果您每次想要使用不同的List
实现,您需要了解它是如何工作的才能使用它。
Iterator接口(以及其他接口)提供了一组一致的方法,允许您使用迭代,即使您不知道它是如何在“引擎盖下”实现的。
答案 1 :(得分:1)
内部结构是保存集合内容的私有成员[s]。
例如,在ArrayList
中,内部结构是一个支持List
的元素的后备数组:
transient Object[] elementData;
Iterator
ArrayList
返回的iterator()
可让您访问ArrayList
的元素而无需访问支持数组,这意味着您无法变异直接支持数组。
对于HashSet
,内部结构是HashMap
,其中包含Set
的元素:
private transient HashMap<E,Object> map;
同样,迭代器使您可以访问Set
的元素,而无法访问HashMap
。
答案 2 :(得分:1)
在此上下文中,内部结构表示集合类或接口的成员函数列表。但进一步思考,由于成员函数列表大致构成类/接口,内部结构表示集合的类/接口。这个陈述很宽泛,可能意味着像array,bag,queue ......这样的集合......
迭代器是一个适配器,通常具有与其操作的集合不同的接口。因此,使用迭代器不仅可以隐藏集合的类声明(定义集合的内部结构),还可以隐藏集合的公共接口(可能与整个集合的类声明分开且小于整个集合的类声明)。而这个公共接口不是内部结构。所以你的原始陈述没有暴露其内部结构是可以的,但并不完全全面。
迭代器不仅使我们免于暴露内部结构,而且还暴露了集合的公共接口。这在代码分离的上下文中为迭代器的概念提供了更多的价值。
答案 3 :(得分:1)
作为一个简单的例子,可以迭代TreeMap
来学习地图的所有成员。当使用迭代器时,我不必关心地图底层的树是二叉树,特里树,b树,红黑树等。作为用户我不想要知道如何维护其内部链接以读取其数据。我不想知道它的实现。寻求可维护性的软件应该减少用户需要了解的实现量。
next()
提供一种逐项获取数据的简单方法。