我在Java中快速编写了一个链表类。我想编写另一个使用链表的队列类。我如何用Java实现这一目标?我不完全理解implements / extends关键字......这就是我的队列的样子(例如):
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>();
答案 0 :(得分:6)
如果您想要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实现Queue,您应该看到@Tudor发布的代码示例。
答案 1 :(得分:2)
代码中有两个错误:
您正在实施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>();
答案 2 :(得分:-1)
由于Linkedlist实现了队列接口,我们可以直接使用poll,peek方法....不需要额外的代码