java remove removeat_Java PriorityQueue删除任意元素的性能
如果您正在使用Sun实施,则为O(log(n))。来自Javadocs:
实施说明:此实施提供
O(log(n))时间用于enqueing和dequeing方法
(offer,poll,remove()和add);
remove(Object)和contains(Object)的线性时间
方法;和检索方法的恒定时间
(peek,element和size)。
其他实现可能有不同的复杂性。
编辑: Javadocs不包括使用迭代器删除元素的性能,所以我不得不查找源代码。这与Sun实现有关,可能在Apple的版本,GNU Classpath等方面有所不同.Sun的源代码可用here;它也包含在JDK中,因此您可能已经安装了它。
在PriorityQueue的迭代器中,remove()的默认情况是调用PriorityQueue.removeAt(lastRet),其中lastRet是next()上次返回的索引}。 removeAt()似乎是O(log(n))最坏的情况(它可能需要筛选队列,但不必迭代)。
然而,有时会发生不好的事情。来自removeAt()的评论:
/**
* Removes the ith element from queue.
*
* Normally this method leaves the elements at up to i-1,
* inclusive, untouched. Under these circumstances, it returns
* null. Occasionally, in order to maintain the heap invariant,
* it must swap a later element of the list with one earlier than
* i. Under these circumstances, this method returns the element
* that was previously at the end of the list and is now at some
* position before i. This fact is used by iterator.remove so as to
* avoid missing traversing elements.
*/
当removeAt()返回非null元素时,迭代器会将其添加到特殊队列中以供以后使用:当迭代器耗尽队列中的元素时,它会遍历此特殊队列。在迭代的第二阶段调用remove()时,迭代器调用PriorityQueue.removeEq(lastRetElt),其中lastRetElt是从特殊队列返回的最后一个元素。 removeEq被迫使用线性搜索来查找要删除的正确元素,这使其成为O(n)。但它可以使用==而不是.equals()来检查元素,因此其常数因子低于PriorityQueue.remove(Object)。
因此,换句话说,使用迭代器进行删除在技术上是O(n),但实际上它应该比remove(Object)快得多。
java remove removeat_Java PriorityQueue删除任意元素的性能相关推荐
- 在Java中使用final关键字可以提高性能吗?
本文翻译自:Does use of final keyword in Java improve the performance? In Java we see lots of places where ...
- 更好的Java虚拟机Zing: 更好的性能,无停顿,更快的启动
Zing虚拟机文档Understanding Java Garbage Collection(了解Java垃圾收集) 首先说明这个Zing是收费的,但是他也是优秀的,我觉得我们可以研究下他的一些思想对 ...
- java remove removeat_2016.3.12 Java中ArrayList类详解(转)
1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和ILis ...
- java使用迭代器删除元素_使用Java从地图中删除元素
java使用迭代器删除元素 关于从Java中的Map删除元素的非常简短的文章. 我们将专注于删除多个元素,而忽略了您可以使用Map.remove删除单个元素的Map.remove . 以下Map将用于 ...
- 使用Java从地图中删除元素
关于从Java中的Map删除元素的非常简短的文章. 我们将专注于删除多个元素,而忽略了您可以使用Map.remove删除单个元素的Map.remove . 以下Map将用于此帖子: Map<In ...
- java web删除文件_Web开发为了java端程序能删除文件的解决办法
Web开发为了java端程序能删除文件,必须在.../jre/lib/security/java.policy文件中添加以下两个中的任何一段代码进去. 注:必须是服务器的本地文件,局域网内的其他机器文 ...
- java堆栈信息查看,以及JVM性能查看工具-jconsole+jmap
java-core P487 P515 chapter11,主要讲java的异常,里面很多内容收获良多,之前一直没注意过的. 一,Throwable类获得StackTraceElement ,可进行 ...
- java蓝桥杯练习 删除多余括号
java蓝桥杯练习 删除多余括号 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算 ...
- java 遍历list并删除_Java遍历List并删除某些元素
Java遍历List并删除某些元素 在阿里的Java编程规约中有一条:[强制]不要在foreach循环里进行元素的remove/add操作.remove元素请使用Iterator方式,如果并发操作, ...
最新文章
- Windows Azure 如何学习Azure
- 【GoLang】转载:我为什么放弃Go语言,哈哈
- 深入理解cookie和session
- JAVAWEB项目--模拟考试系统数据库设计与实现(二)
- UGUI_UGUI事件系统简述及使用方法总结
- mysql innodb flus_MySQL参数解析innodb_flush_neighbors
- ios15之取消UITabbleViewCell的高亮效果
- [html] 用一个div模拟textarea的实现
- 水晶报表中对某一栏位值进行处理_合并报表——非同一控制下的企业合并amp;同一控制下的企业合并...
- ntko跨浏览器插件_继泄露版后,微软全新 Chrome 内核 Edge 浏览器你都测试过了吗?...
- 3. Magento 模板制作
- qt html 案例,QT代替WebView的方法及使用例子
- 如何解决佳能mp288打印机P08、P07报错
- 鼠标右键菜单没有 新建 - 解决办法
- win10系统禁用音频服务器,Win10下怎样设置禁用扬声器、插入耳机有声音【图文教程】...
- mybatis之choose标签
- 还敢搞黄色?4 个色情网站被一锅端,9 名福利姬被刑拘!
- 【3】SALSA-基于HIC数据辅助组装长读长组装结果
- android sim卡槽,一加5怎么装卡/插卡 一加手机5 SIM卡安装图文教程
- 矩阵的秩和向量组的秩