java 实现队列插入_用Java实现队列的最快方法

本文探讨了一种通过改进数据结构和算法以降低队列操作执行时间的方法。具体介绍了如何优化getMin/getMax/getMedian等操作,并讨论了LinkedList与ArrayList在队列实现上的性能差异。

我想知道我应该对这段代码做些什么改变以减少它的执行时间.

import java.util.*;

public class ExamPeekableQueueImpl > implements ExamPeekableQueue {

LinkedList li = new LinkedList();

public ExamPeekableQueueImpl(){

}

public void enqueue(E e){

if(li.isEmpty()){

li.add(0, e);

}

else

li.add(e);

}

public E dequeue(){

li.pollFirst();

return null;

}

public void printlist(){

System.out.println(li.toString());

}

public E peekMedian(){

int var = (((li.size())/2)+1);

Collections.sort(li);

//Integer var2 = li.get(var);

System.out.println("the median is:" + li.get(var-1));

return null;

}

public E peekMaximum(){

Collections.sort(li);

System.out.println("the maximum is:" + li.getLast());

return null;

}

public E peekMinimum(){

Collections.sort(li);

System.out.println("the minimum is:" + li.getFirst());

return null;

}

public int size(){

li.size();

return 0;

}

}

另外我想知道的是,对于实现队列,LinkedList是更快还是ArrayList或任何其他数据结构.

解决方法:

目前你有插入O(1)和getMin / getMax / getMedian的O(nlogn).您可以使用排序数据结构将登录从getter移动到插入部分.或者您可以保持插入不变并通过在列表中进行线性搜索并仅存储最小值来优化getMin / getMax.对于getMedian,没有什么可做的,因为你需要一个有序的集合.

进一步的优化是存储最小值/最大值并在每个插入步骤期间更新两个值.这将不会对插入进行任何(非常量)更改,并将getMin / getMax减少为O(1). (感谢Tedil)

这同样适用于getMedian,您可以在其中保存与链接列表并行的排序列表.然后,您可以简单地从该列表中间选择中位数.当然,这会将插入时间更改为O(logn)或更糟(取决于您使用的列表),并且还会使存储空间量增加一倍.因此,它比getMin / getMax更优化.

标签:java,queue

来源: https://codeday.me/bug/20190620/1248205.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值