在java中实现队列

在Java中实现队列是一个非常常见的面试问题。 我在线浏览并看到许多实现,他们做了很多花哨的东西,如实现队列接口和编写自己的addLast()removeFirst()方法。 我的问题是我不能只使用LinkedList()类并使用其预定义的方法addLastremoveFirst方法来做同样的事情? 例如

 LinkedList qu=new LinkedList(); qu.add(new Student("anadkat1")); qu.add(new Student("anadkat2")); qu.add(new Student("anadkat5")); System.err.println(qu); qu.removeFirst(); System.err.println(qu); 

这给了我完美的结果。 这不够吗?

 public class Queue{ private LinkedList list=new LinkedList<>(); public void insert(T element){ list.addLast(element); } public void remove(){ list.removeFirst(); } public int size(){ return list.size(); } public T element(){ return list.getFirst(); } } 

我最近经历过这些面试问题。

使用set方法从列表中添加,删除,chekForEmpty等是实现队列的一般方法。

例如 :

  public void enqueue(E item) { list.addLast(item); } public E dequeue() { return list.poll(); } public boolean hasItems() { return !list.isEmpty(); } public int size() { return list.size(); } public void addItems(GenQueue l) { while (l.hasItems()) list.addLast(l.dequeue()); } 

一种方法是将一个项q和两个索引的数组保持到队列的头部和尾部(最初设置为0)。 伪代码如下:

 enqueue(x) { q[tail++] = x; } dequeue() { return q[head++]; } 

如果数组溢出,则将大小加倍并重新插入项目。 这产生每次操作的O(1)摊销时间。 另一种方法是使用链接列表(您应该实现)并再次存储指向头部的指针和指向尾部的指针。