我很快用Java写了一个链表类。我想编写另一个使用链表的队列类。我将如何在 Java 中实现这一点?我不完全理解实现/扩展关键字...这是我的队列的样子(例如):
public class Queue<T> implements LinkedList
{
protected LinkedList<T> list;
public Queue() {
list = new LinkedList<T>();
}
public void add( T element) {
list.add( element);
}
public T removeLast() {
return list.removeLast();
}
}
另请注意,链表类也是泛型的。我知道已经有内置的类来实现此功能,但我想学习(这就是我尝试手动执行此操作的原因)
编辑:此外,最后,我希望能够说这样的话:
Queue<String> aQueue = new LinkedList<String>();
想要像Queue<String> aQueue = new LinkedList<String>();
这样的行为,那么你的LinkedList
必须扩展/实现Queue
类/接口。请记住,超类可以是子类的对象引用实例,反之亦然。
public class LinkedList<T> implements Queue<T> {
class Node<T> {
T data;
Node<T> next;
}
//all your behavior here
}
此外,正如 Java 文档所述,Queue
是一个接口,LinkedList
实现它。
注意:如果要使用 LinkedList 实现队列,您应该会看到 @Tudor 发布的代码示例。
代码中的两个错误:
-
你们都在实现
LinkedList
(你的意思是扩展吗?)并通过在类中设置一个LinkedList
来使用组合。 -
这段代码将不起作用:
Queue<String> aQueue = new LinkedList<String>();
因为根据第 1 点,Queue
要么是LinkedList
的子类,要么包含一个LinkedList
,这使您的代码不正确。
事实上,最后一个代码片段几乎没有意义。我假设您要做的是创建一个内部使用链表的Queue
。在这种情况下,只需使用:
public class Queue<T>
{
protected LinkedList<T> list;
public Queue() {
list = new LinkedList<T>();
}
public void add( T element) {
list.add( element);
}
public T removeLast() {
return list.removeLast();
}
}
然后:
Queue<String> queue = new Queue<String>();
由于 Linkedlist 实现了队列接口,我们可以直接使用轮询、窥视方法。无需额外代码