在Java中实现排队的更有效方法是什么

在Java中实现排队的更有效方法是什么,java,performance,arraylist,queue,Java,Performance,Arraylist,Queue,我用java编写了这个简单的代码。它在不更改原始队列的情况下,将队列(添加)和元素添加到队列的末尾(由ArrayList实现)。守则: public class MyQueue<T>{ private List<T> body; // some constructors and helper functions. //copy constructor public Queue(List<T> list){ this.body = list; } //th

我用java编写了这个简单的代码。它在不更改原始队列的情况下,将队列(添加)和元素添加到队列的末尾(由ArrayList实现)。守则:

public class MyQueue<T>{
private List<T> body;

// some constructors and helper functions.

//copy constructor
public Queue(List<T> list){
this.body = list;
}

//this is the function
public MyQueue<T> enqueue(T obj){
List<T> temp = new ArrayList<T>(body);
temp.add(obj);
return new Queue<T>(temp);
}

有什么想法吗?多亏了

队列是一种基本的数据结构,很难让它比研究它的专家做得更好。最简单、最快的通用实现可能是
ArrayDeque
,几乎没有什么可以改进的

你所做的充其量也很奇怪:

  • 复制整个内容,而不是附加元素。为什么?
  • 在最高索引处插入新元素,为什么?这样,您的轮询(出列、删除等)必须删除元素0处的索引,这对于
    ArrayList
    来说很慢

事实上,我不知道你的
投票结果会是什么样子。在任何情况下,您的排队都不会达到我对这种方法的期望。

使用LinkedList而不是ArrayList。队列中不需要索引访问,但需要快速入队/出队。如果您需要索引访问。这根本不是排队。只需使用add()方法,不要每次都创建一个全新的队列。您的enqueue()方法应返回“this”或void。不要让来电者提供列表:创建自己的列表。

效率不够吗?您是如何分析应用程序的?取决于您想对这些项目做什么?您是否尝试过java自己的?为什么你认为它不够高效?我有一个框架,说明它需要更快。你说“我复制了两次”,但我看不到。
ArrayList
ctor中有复制,仅此而已。添加新元素时可能会有复制,因此容量接受ctor可能会更好。基本上,正如我所提到的,我的队列应该向调用者返回一个新队列(或列表),该队列包含调用者的原始数组,并附加新元素,而不更改旧队列。因此我必须复印一份。但我知道这样我会变慢,所以我的目的是asking@MandM审查该要求。这是荒谬的。我会的,但我们无能为力,整个任务都围绕着这个。你认为使用LinkedList会是一个有效的提升吗?我试着用System.nanotime检查时间。它们的执行时间大致相同..我并没有实现一个完整的队列,赋值的全部目的是使这一代码更快。请检查更新。@MandM:在我看来,这一切都是胡说八道。
enqueue
方法返回一个新的
MyQueue
,而不是修改旧的。后者显然要快得多,但这完全是另一回事。
public T peek(){
if(body.isEmpty()){
   thrown new NoSuchElementException();
}
return body.get(0);
}

public int size(){
return body.size();
}