什么样的数据结构可以使用迭代器?

yizd12fk  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(741)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

上个月关门了。
改进这个问题
我刚参加了一个cs课程的测验,我想把我的想法和你们知道的做个比较。问题是“以下哪种数据结构可以用迭代器逐步遍历?”选项是“arraylist,queueadt的基于数组的实现,以及stackadt的基于数组的实现。”您可以选择多个,但是我只选择了arraylist——我认为迭代器只能逐步遍历对象数据结构,而且由于ADT是使用数组实现的,所以迭代器不能用于它们。我的想法不对吗?

uttx8gqw

uttx8gqw1#

问题有点,呃。。。不清楚的。

每一种感觉的感觉

如果意义是“你能为上的每个构造使用什么”,那么答案是:的示例 Iterable ,和数组:

  1. int[] a = new int[10];
  2. for (int b : a) { .... }

是合法的,尽管 a 是不可忍受的。一 Iterable 定义为:has the method public Iterator iterator() { .. } . 所以迭代器不是iterable,而是类似于 ArrayList 工具 Iterable .
从这个意义上说,数组很像iterables:您可以单步遍历它们。只是,不是用迭代器,除非。。。

“一个迭代器可能是有意义的”

嘿,我可以让你成为一个迭代数组的迭代器,没问题:

  1. String[] arr = new String[10];
  2. return new Iterator<String>() {
  3. private int idx = 0;
  4. public boolean hasNext() { return idx < arr.length; }
  5. public String next() { return arr[idx++]; }
  6. };

那么,你能用迭代器迭代数组吗?我想是的。只用了5行。

“基于数组”并不意味着“数组”解释

arraylist是基于数组的list实现。因此得名 ArrayList . 它是iterable,将返回迭代器。这个实现看起来很像我在上一节中写的。
假设queueadt是对此的引用-那么 QueueADT 类似于 List (一个只定义操作的接口)和“基于数组的queueadt实现”将类似于 ArrayList . 然而,一个关键的区别是列表接口本身要求任何实现都是 Iterable<T> ,而 QueueADT 接口不需要这个,假设我链接到了正确的代码。不过,实现(子类型)可以根据需要添加额外的特性。这是完全合法的:

  1. public class ArrayQueueAdt<T> implements QueueADT<T>, Iterable<T> {
  2. private final Object[] array;
  3. @Override public Iterator<T> iterator() {
  4. // something like the above
  5. }
  6. public void enqueue(T element) {
  7. // impl here
  8. }
  9. // etcetera
  10. }

在“数组是迭代器或iterable”的意义上

那么不。数组不实现 Iterable ,而且他们没有 iterator() 方法。将数组转换为iterable或iterator的惯用java方法是: Arrays.asList(theArray) ,它是轻量级的(不复制任何内容)并且是可移植的。 Arrays.asList(theArray).iterator() 类似地,也是一种轻量级(无拷贝)的方法。那么,也许?
它们不必这样做(因为queueadt不声明它,而list声明它)。
所以,答案差不多是¯(ツ)/¯ 我想是的,因为所有这些感觉的答案都是肯定的,或者可能。

展开查看全部

相关问题