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

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

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

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

uttx8gqw

uttx8gqw1#

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

每一种感觉的感觉

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

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

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

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

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

String[] arr = new String[10];

return new Iterator<String>() {
   private int idx = 0;
   public boolean hasNext() { return idx < arr.length; }
   public String next() { return arr[idx++]; }
};

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

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

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

public class ArrayQueueAdt<T> implements QueueADT<T>, Iterable<T> {
    private final Object[] array;

    @Override public Iterator<T> iterator() {
        // something like the above
    }

    public void enqueue(T element) {
        // impl here
    }

    // etcetera
}

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

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

相关问题