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



所以我在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);
}

整个想法是使排队更快、更高效,正如您所注意到的,在不更改原始队列的值的情况下。

更新 为了完成这个想法。

1-这是一项作业,所以大学,提供的骨架不会更改,任务是使函数排队更快(我确实意识到我正在复制两次,这是缓慢的部分)。

2-至于辅助功能,它们很简单:

public T peek(){
if(body.isEmpty()){
   thrown new NoSuchElementException();
}
return body.get(0);
}
public int size(){
return body.size();
}

有什么想法吗?谢谢

队列是一种基本的数据结构,很难让它比专家做得更好。最简单和最快的通用实现可能是ArrayDeque,几乎没有任何需要改进的地方。

你正在做的事情充其量是奇怪的:

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

实际上,我不知道你的poll会是什么样子。无论如何,您的排队不会执行我对此类方法的期望。

使用 LinkedList 而不是 ArrayList。您不需要队列中的索引访问,但确实需要快速排队/取消排队。如果需要索引访问。它根本不是真正的队列。并且只使用 add() 方法,不要每次都创建一个全新的队列。您的 enqueue() 方法应该返回 'this' 或 void。并且不允许呼叫者提供列表:创建自己的列表。

最新更新