java - 在 Java 中实现 Queue 但不能覆盖 iterator() 方法
问题描述
我正在尝试通过在我自己的“MyQueue”类中实现它来发展我对 Queue 接口的了解。但是,我想重写 iterator() 方法。由于我不能同时实现Iterator和Queue接口,我很茫然。
在我的 iterator() 方法上,cannot convert from MyQueue<E>.QueueIterator to Iterator<E>
当我将鼠标悬停在单词下方的红色下划线时,Eclipse 给了我错误new QueueIterator()
。
此外,当我尝试实现我的“QueueIterator”内部类时,syntax error on token "class", @ expected
当我将鼠标悬停在单词下方的红色下划线时,Eclipse 给了我错误class
。
在下面的代码示例中,我删除了所有与我的问题无关的方法。我知道我必须实现这些方法来实现队列。我只是想让问题更清楚。
如何覆盖 iterator() 方法?
我的队列类:
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();
}
}
解决方案
QueueIterator
需要实施Iterator<E>
。
你不应该在这一行有括号:
private class QueueIterator() {
它应该只是:
private class QueueIterator {
实际上:
private class QueueIterator implements Iterator<E> {
推荐阅读
- c++ - C++ UTC 到本地时区
- javascript - 元素根本不显示 JS
- eclipse - eclipse:“清理”只是代码的一部分
- c++ - 通过 std::visit 从 std::variant 中的可能类型返回值
- c++ - 为什么这个程序关闭而不是显示输出?
- javascript - 我如何在纯 JS 和 PHP 中做同样的事情,类似于 jQuery 和 Laravel?
- python-3.x - 在 AWS lambda 函数中使用 SES 发送 xlsx 文件
- ios - 使用自调整单元格在 UICollectionView 上调用 invalidateLayout 抱怨所有约束
- python - python tkinter 列表框与其他 tk/ttk 小部件的性能
- azure - Microsoft.Azure.WebJobs.Extensions.EventGrid:对象引用未设置为对象的实例