关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。
上个月关门了。
改进这个问题
我刚参加了一个cs课程的测验,我想把我的想法和你们知道的做个比较。问题是“以下哪种数据结构可以用迭代器逐步遍历?”选项是“arraylist,queueadt的基于数组的实现,以及stackadt的基于数组的实现。”您可以选择多个,但是我只选择了arraylist——我认为迭代器只能逐步遍历对象数据结构,而且由于ADT是使用数组实现的,所以迭代器不能用于它们。我的想法不对吗?
1条答案
按热度按时间uttx8gqw1#
问题有点,呃。。。不清楚的。
每一种感觉的感觉
如果意义是“你能为上的每个构造使用什么”,那么答案是:的示例
Iterable
,和数组:是合法的,尽管
a
是不可忍受的。一Iterable
定义为:has the methodpublic Iterator iterator() { .. }
. 所以迭代器不是iterable,而是类似于ArrayList
工具Iterable
.从这个意义上说,数组很像iterables:您可以单步遍历它们。只是,不是用迭代器,除非。。。
“一个迭代器可能是有意义的”
嘿,我可以让你成为一个迭代数组的迭代器,没问题:
那么,你能用迭代器迭代数组吗?我想是的。只用了5行。
“基于数组”并不意味着“数组”解释
arraylist是基于数组的list实现。因此得名
ArrayList
. 它是iterable,将返回迭代器。这个实现看起来很像我在上一节中写的。假设queueadt是对此的引用-那么
QueueADT
类似于List
(一个只定义操作的接口)和“基于数组的queueadt实现”将类似于ArrayList
. 然而,一个关键的区别是列表接口本身要求任何实现都是Iterable<T>
,而QueueADT
接口不需要这个,假设我链接到了正确的代码。不过,实现(子类型)可以根据需要添加额外的特性。这是完全合法的:在“数组是迭代器或iterable”的意义上
那么不。数组不实现
Iterable
,而且他们没有iterator()
方法。将数组转换为iterable或iterator的惯用java方法是:Arrays.asList(theArray)
,它是轻量级的(不复制任何内容)并且是可移植的。Arrays.asList(theArray).iterator()
类似地,也是一种轻量级(无拷贝)的方法。那么,也许?它们不必这样做(因为queueadt不声明它,而list声明它)。
所以,答案差不多是¯(ツ)/¯ 我想是的,因为所有这些感觉的答案都是肯定的,或者可能。