0

我很快用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>();
4

3 回答 3

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 实现队列,您应该看到 @Tudor 发布的代码示例。

于 2012-05-06T14:04:07.367 回答
2

您的代码中有两个错误:

  1. 您既在实现LinkedList(您的意思是扩展吗?)并通过LinkedList在类中使用组合来实现。

  2. 这段代码不起作用:Queue<String> aQueue = new LinkedList<String>();因为根据第 1 点,Queue它要么是 的子类,LinkedList要么包含 a 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>();
于 2012-05-06T13:59:01.403 回答
-1

由于 Linkedlist 实现了队列接口,我们可以直接使用 poll、peek 方法......不需要额外的代码

于 2014-06-17T13:23:36.360 回答