public class Queue<E>
        private List<E> queue;
public Queue(){
queue=new ArrayList<E>();
}
public Queue(List<E> l){
this.queue=l;
}
@Override
public Queue<E> enqueue(E e) {
List<E> temp=new ArrayList<E>();
temp.add(e);
return new Queue<E>(temp);
}
}
这个是先进先出队列,而且原队列不允许改变,返回一个新的以插入值的队列问:实现一样的功能,但是要比上面的enqueue更快的方法

解决方案 »

  1.   

    更快的方法基本没有。不过你的enqueue应该是写错了吧,原队列的元素直接全都被抛弃了已经。
      

  2.   

    是写错了,不好意思!!应该是这么样子:
     List<E> temp=new ArrayList<E>(this.queue);
      

  3.   

    确实没有啥更快的方法,没记错的话ArrayList在做复制的时候,已经使用了原生的copy。而你这个要求中,主要的时间开销就是在队列的复制上。
    或者自行用数组来实现队列,能稍微再提升点速度。
      

  4.   

    或许考虑的方面要改改,这个是笔试题~因为如果执行多次enqueue操作,那么就会产生很多Queue对象,可能我需要的对象只是最后一个而已
      

  5.   

    哦,如果这样的话,可以考虑用链表来实现。每次增加新元素就附在原链表上,这样可以消除掉复制的过程。不过仍然需要创建一个新的Queue对象,记录新的链尾。
      

  6.   

    这个只是我自己的想法。原题目的要求是实现FIFO队列的enqueue函数,要求就是不改变原队列的前提,返回一个已插入值的新队列,而且要比它提供的enqueue函数更快