Я пытаюсь расширить свои знания об интерфейсе очереди, реализовав его в своем собственном классе «MyQueue».Однако я хочу переопределить метод iterator ().Поскольку я не могу одновременно реализовать интерфейсы Iterator и Queue, я в растерянности.
В моем методе iterator () Eclipse выдает ошибку, cannot convert from MyQueue<E>.QueueIterator to Iterator<E>
, когда я нахожу курсор мыши наПодчеркивание красным цветом под словами new QueueIterator()
.
Кроме того, когда я пытаюсь реализовать свой внутренний класс "QueueIterator", Eclipse выдает мне ошибку, syntax error on token "class", @ expected
, когда я наводю курсор мыши на подчеркивание красного цвета под словом * 1008.*.
В приведенных ниже примерах кода я удалил все методы, не имеющие отношения к моему вопросу.Я знаю, что я должен реализовать эти методы для реализации очереди.Я просто пытаюсь прояснить проблему.
Как мне переопределить метод iterator ()?
Класс MyQueue:
import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Queue;
/**
* A custom queue class. Uses a singly-linked list.
*/
public class MyQueue<E> implements Queue {
// the top of the queue
private Node<E> first;
private int size;
/**
* Creates new myQueue object
*/
public MyQueue() {
first = null;
current = null;
size = 0;
}
@Override
public Iterator<E> iterator() {
return new QueueIterator();
}
/**
* Holds Objects and points to the next one.
*
*/
private class Node<E> {
private E data;
private Node<E> next;
/**
* Creates a Node object
* @param data The Object to be held by the Node
*/
Node(E data) {
this.data = data;
this.next = null;
}
private Node<E> getNext() {
return this.next;
}
private E getData() {
return this.data;
}
}
/**
* Iterator implementation
*/
private class QueueIterator() {
private Node<E> curNode;
public QueueIterator() {
curNode = null;
}
public boolean hasNext() {
if(curNode == null && first != null) {
return true;
} else if (curNode.getNext() != null) {
return true;
} else {
return false;
}
}
public E next() {
if(curNode == null && first != null) {
curNode = first;
return curNode.getData();
}
if(!hasNext()) {
throw new NoSuchElementException();
}
curNode = curNode.getNext();
return curNode.getData();
}
}