【发布时间】:2018-10-13 13:06:45
【问题描述】:
我正在学习编程并且是这个领域的新手,因为我有机械背景。 昨天我收到了教授的问题陈述。他为我们提供了一个自定义迭代器,旨在交替迭代给定的元素。
Alternate Iterator 代码如下。
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
public class AlternatingIterator<E> implements Iterator{
private final Queue<E> queue = new LinkedList<>();
public AlternatingIterator(Iterator<E> ... iterators) {
for(Iterator<E> iterator : iterators) {
while(iterator.hasNext())
queue.add(iterator.next());
}
}
@Override
public boolean hasNext() {
return queue.isEmpty() ? false : true;
}
@Override
public Object next() {
return queue.poll();
}
}
现在,AlternatingIterator 应该在它在其构造函数中接收的迭代器之间按顺序交替。例如,如果使用三个迭代器 [a,b,c]、[1,2] 和 [x,y,z] 构造,则迭代器应按以下顺序生成元素 'a, 1, x, b, 2, y , c, z'
我还必须为“hasNext”和“next”方法编写单元测试。
我们可以实现除队列之外的任何其他数据结构吗?
我对如何解决这个挑战感到非常震惊和厌倦,但在这里却很困惑。如果你们可以帮助我,那么我可以很快学习重要的概念。
在此先感谢您的帮助。
【问题讨论】:
-
通过将现有迭代器中的元素复制到集合中来实现迭代器是没有意义的:您也可以只使用该集合中的迭代器。我怀疑分配的重点是使用输入迭代器而不提前使用它们。
-
什么是输入迭代器?
-
输入迭代器是您提供给构造函数的迭代器:
Iterator<E> ... iterators。
标签: java junit collections iterator