队列使用Java中的链表实现

时间:2012-05-06 13:53:44

标签: java generics linked-list queue

我在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>();

3 个答案:

答案 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)

代码中有两个错误:

  1. 您正在实施LinkedList(您的意思是扩展吗?)并在课堂上使用LinkedList来使用构图。

  2. 这段代码不起作用:Queue<String> aQueue = new LinkedList<String>();因为根据第1点,QueueLinkedList的子类或包含LinkedList,使你的代码不正确。

  3. 事实上,最后一段代码片段没什么意义。我假设您要做的是创建一个内部使用链表的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方法....不需要额外的代码