Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不暴露“内部结构”是什么意思?(迭代器)_Java_Oop_Collections_Iterator - Fatal编程技术网

Java 不暴露“内部结构”是什么意思?(迭代器)

Java 不暴露“内部结构”是什么意思?(迭代器),java,oop,collections,iterator,Java,Oop,Collections,Iterator,迭代器的关键属性之一是 迭代器模式允许我们: 访问集合的内容而不暴露其内部结构。 确切的意思是什么,内部结构是什么?每个数据结构的实现方式都不同。有些结构可能使用链接设计,有些结构可能由单个阵列支持,或者两者混合使用。想象一下,如果每次您想要使用不同的列表实现时,您都需要了解如何使用它 迭代器接口以及其他接口提供了一组一致的方法,允许您使用iterable,即使您不知道它是如何在后台实现的 每个数据结构的实现方式都不同。有些结构可能使用链接设计,有些结构可能由单个阵列支持,或者两者混合使用。想象

迭代器的关键属性之一是

迭代器模式允许我们:

访问集合的内容而不暴露其内部结构。
确切的意思是什么,内部结构是什么?

每个数据结构的实现方式都不同。有些结构可能使用链接设计,有些结构可能由单个阵列支持,或者两者混合使用。想象一下,如果每次您想要使用不同的列表实现时,您都需要了解如何使用它


迭代器接口以及其他接口提供了一组一致的方法,允许您使用iterable,即使您不知道它是如何在后台实现的

每个数据结构的实现方式都不同。有些结构可能使用链接设计,有些结构可能由单个阵列支持,或者两者混合使用。想象一下,如果每次您想要使用不同的列表实现时,您都需要了解如何使用它


迭代器接口以及其他接口提供了一组一致的方法,允许您使用iterable,即使您不知道它是如何在后台实现的

内部结构是保存集合内容的私有成员

例如,在ArrayList中,内部结构是一个包含列表元素的支持数组:

ArrayList的迭代器返回的迭代器允许您访问ArrayList的元素,而不允许您访问支持数组,这意味着您不能直接修改支持数组

对于HashSet,内部结构是一个包含集合元素的HashMap:


同样,迭代器允许您访问集合的元素,而不允许您访问HashMap。

内部结构是保存集合内容的私有成员

例如,在ArrayList中,内部结构是一个包含列表元素的支持数组:

ArrayList的迭代器返回的迭代器允许您访问ArrayList的元素,而不允许您访问支持数组,这意味着您不能直接修改支持数组

对于HashSet,内部结构是一个包含集合元素的HashMap:

同样,迭代器允许您访问集合的元素,而不允许您访问HashMap。

在此上下文中,内部结构表示集合类或接口的成员函数列表。但进一步考虑,由于成员函数列表大致构成了类/接口,内部结构意味着集合的类/接口。这个语句很宽,可以表示数组、包、队列之类的集合

迭代器是一个适配器,它的接口通常与其操作的集合不同。因此,使用迭代器不仅可以隐藏集合的类声明(定义集合的内部结构),还可以隐藏集合的公共接口(可能是单独的,并且比整个集合的类声明小)。这个公共接口不是内部结构。因此,您的原始声明没有暴露其内部结构是可以的,但不是完全全面的

迭代器不仅可以避免暴露内部结构,还可以避免暴露集合的公共接口。这在代码分离的上下文中为迭代器的概念提供了更多的价值。

在此上下文中,内部结构意味着集合类或接口的成员函数列表。但进一步考虑,由于成员函数列表大致构成了类/接口,内部结构意味着集合的类/接口。这个语句很宽,可以表示数组、包、队列之类的集合

迭代器是一个适配器,它的接口通常与其操作的集合不同。因此,使用迭代器不仅可以隐藏集合的类声明(定义集合的内部结构),还可以隐藏集合的公共接口(可能是单独的,并且比整个集合的类声明小)。这个公共接口不是内部结构。因此,您的原始声明没有暴露其内部结构是可以的,但不是完全全面的

迭代器不仅可以避免暴露内部结构,还可以避免暴露集合的公共接口。这使得迭代器的概念在代码分离的上下文中更有价值。

作为一个简单的例子,可以迭代树映射来学习映射的所有成员。使用迭代器时,我不必关心映射下面的树是否是二叉树、trie树、b树、红黑t树 作为一个用户,我不想知道它如何维护内部链接来读取数据。我不想知道关于它的实现的任何事情。寻求可维护性的软件应该减少用户需要了解其实现的数量

从这个意义上讲,结构的使用方式与数据结构中的使用方式相同……一种在内存中组织数据的方式,以允许高效的查找、插入、删除或其他操作。迭代器通过提供一种简单的方法来逐项获取数据(只需调用next),从而隐藏用于使操作高效的组织方案的详细信息。

作为一个简单的示例,可以迭代树映射以了解映射的所有成员。当使用迭代器时,我不必关心映射下面的树是否是二叉树、trie、b树、红黑树等。作为用户,我不想知道它如何维护内部链接以读取数据。我不想知道关于它的实现的任何事情。寻求可维护性的软件应该减少用户需要了解其实现的数量


从这个意义上讲,结构的使用方式与数据结构中的使用方式相同……一种在内存中组织数据的方式,以允许高效的查找、插入、删除或其他操作。迭代器通过提供一种简单的方法来逐项获取数据,只需调用next即可隐藏用于提高操作效率的组织方案的详细信息。

这意味着您可以遍历每个项目,而不知道它们是如何到达的、如何删除的、如何存储的,等等…这意味着你可以浏览每一件物品,而不知道它们是如何到达那里的,它们是如何被移除的,它们是如何被存储的,等等…非常感谢!迭代器提供了一个remove方法。所以,我认为“不能变异”这个短语可以是reworded@user7请注意句子的其余部分-不能直接改变支持数组谢谢!迭代器提供了一个remove方法。所以,我认为“不能变异”这个短语可以是reworded@user7请注意句子的其余部分-不能直接改变支持数组
transient Object[] elementData;
private transient HashMap<E,Object> map;