在java中实现队列

时间:2015-01-24 23:14:15

标签: java queue

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

LinkedList<Student> qu=new LinkedList<Student>();
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);

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

3 个答案:

答案 0 :(得分:1)

public class Queue<T>{
private LinkedList<T> 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();
}
}

答案 1 :(得分:0)

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

使用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<? extends E> l) {
      while (l.hasItems())
        list.addLast(l.dequeue());
        }

答案 2 :(得分:0)

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

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

dequeue()
{   return q[head++];
}

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