繁体   English   中英

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

[英]what is a more efficient way to implement enqueue in 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。 并且不允许调用者提供列表:创建自己的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM