什么是Java中的嵌套并行迭代器?

时间:2019-04-05 23:51:53

标签: java algorithm iterator

我正在从事在线课程的编程工作。我提交了作业,并获得了成绩以及他们执行的测试日志。在该日志中,我看到了:

  

测试9:在同一随机队列上创建两个嵌套的迭代器

     

n = 10-两个内部迭代器返回相同的项目序列-它们应返回相同的项目集,但顺序不同   ...

我还看到了类似的消息,其中“嵌套”已替换为“平行”。

我的类迭代器的代码如下:

public Iterator<Item> iterator() { return new RandomizedQueueIterator(); }
  private class RandomizedQueueIterator implements Iterator<Item> {
    private int start = head;
    public boolean hasNext() { return start < tail; }
    public Item next() {
      if (start == tail)
         throw new NoSuchElementException();
      return a[start++];
    }
    public void remove() { throw new UnsupportedOperationException(); }
  }

其中head是指向Queue数据结构顶部的当前元素的指针,而tail是Queue数据结构末尾的当前元素。

该课程提供的代码(Sedgewick的《算法I》)仅向我们提供了有关如何完成上述操作的信息。

任何帮助将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:1)

“嵌套迭代器”和“并行迭代器”不是标准术语,但我至少可以解释一下这一部分:

  

n = 10-两个内部迭代器返回相同的项目序列-它们应该返回相同的项目集,但顺序不同...

这就是说,当迭代器应该以不同顺序给出相同的十个项目时,它们以 same 顺序给出相同的十个项目。

要以错误报告的形式编写此代码,就是说您有以下错误:

  

要重制的步骤:创建一个包含十个元素的RandomizedQueue。获得两个迭代器(通过两次调用iterator())。遍历每个对象(通过反复调用hasNext()next()直到hasNext()返回false),并记录结果。

     

预期的行为:两个迭代器应给出相同的十个元素,但顺序不同(随机)。例如,一个迭代器可能给出[1、8、3、2、6、10、9、4、7、5],而另一个可能给出[8、6、3、2、7、9、10、1 5,4]。

     

实际行为:两个迭代器以相同顺序提供相同的元素。例如,它们都给出[1、8、3、2、6、10、9、4、7、5]。