所以我在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();
}
有什么想法吗?感谢
答案 0 :(得分:1)
队列是一种基本的数据结构,很难让它比使用它的专家更好。最简单,最快速的通用实现可能是ArrayDeque
,而且几乎无法改进。
你正在做的事情充其量是奇怪的:
ArrayList
来说很慢。实际上,我不知道您的poll
可能会是什么样子。在任何情况下,你的enqueue都不会像我这样的方法那样做。
答案 1 :(得分:0)
使用LinkedList而不是ArrayList。您不需要队列中的索引访问,但您需要快速入队/出队。如果您需要索引访问。它根本不是一个队列。并且只需使用add()方法,不要每次都创建一个全新的队列。你的enqueue()方法应该返回'this'或void。并且不允许调用者提供列表:创建自己的列表。