如果您正在使用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删除任意元素的性能相关推荐

  1. 在Java中使用final关键字可以提高性能吗?

    本文翻译自:Does use of final keyword in Java improve the performance? In Java we see lots of places where ...

  2. 更好的Java虚拟机Zing: 更好的性能,无停顿,更快的启动

    Zing虚拟机文档Understanding Java Garbage Collection(了解Java垃圾收集) 首先说明这个Zing是收费的,但是他也是优秀的,我觉得我们可以研究下他的一些思想对 ...

  3. java remove removeat_2016.3.12 Java中ArrayList类详解(转)

    1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和ILis ...

  4. java使用迭代器删除元素_使用Java从地图中删除元素

    java使用迭代器删除元素 关于从Java中的Map删除元素的非常简短的文章. 我们将专注于删除多个元素,而忽略了您可以使用Map.remove删除单个元素的Map.remove . 以下Map将用于 ...

  5. 使用Java从地图中删除元素

    关于从Java中的Map删除元素的非常简短的文章. 我们将专注于删除多个元素,而忽略了您可以使用Map.remove删除单个元素的Map.remove . 以下Map将用于此帖子: Map<In ...

  6. java web删除文件_Web开发为了java端程序能删除文件的解决办法

    Web开发为了java端程序能删除文件,必须在.../jre/lib/security/java.policy文件中添加以下两个中的任何一段代码进去. 注:必须是服务器的本地文件,局域网内的其他机器文 ...

  7. java堆栈信息查看,以及JVM性能查看工具-jconsole+jmap

    java-core  P487 P515 chapter11,主要讲java的异常,里面很多内容收获良多,之前一直没注意过的. 一,Throwable类获得StackTraceElement ,可进行 ...

  8. java蓝桥杯练习 删除多余括号

    java蓝桥杯练习 删除多余括号 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算 ...

  9. java 遍历list并删除_Java遍历List并删除某些元素

    Java遍历List并删除某些元素 ​在阿里的Java编程规约中有一条:[强制]不要在foreach循环里进行元素的remove/add操作.remove元素请使用Iterator方式,如果并发操作, ...

最新文章

  1. Windows Azure 如何学习Azure
  2. 【GoLang】转载:我为什么放弃Go语言,哈哈
  3. 深入理解cookie和session
  4. JAVAWEB项目--模拟考试系统数据库设计与实现(二)
  5. UGUI_UGUI事件系统简述及使用方法总结
  6. mysql innodb flus_MySQL参数解析innodb_flush_neighbors
  7. ios15之取消UITabbleViewCell的高亮效果
  8. [html] 用一个div模拟textarea的实现
  9. 水晶报表中对某一栏位值进行处理_合并报表——非同一控制下的企业合并amp;同一控制下的企业合并...
  10. ntko跨浏览器插件_继泄露版后,微软全新 Chrome 内核 Edge 浏览器你都测试过了吗?...
  11. 3. Magento 模板制作
  12. qt html 案例,QT代替WebView的方法及使用例子
  13. 如何解决佳能mp288打印机P08、P07报错
  14. 鼠标右键菜单没有 新建 - 解决办法
  15. win10系统禁用音频服务器,Win10下怎样设置禁用扬声器、插入耳机有声音【图文教程】...
  16. mybatis之choose标签
  17. 还敢搞黄色?4 个色情网站被一锅端,9 名福利姬被刑拘!
  18. 【3】SALSA-基于HIC数据辅助组装长读长组装结果
  19. android sim卡槽,一加5怎么装卡/插卡 一加手机5 SIM卡安装图文教程
  20. 矩阵的秩和向量组的秩

热门文章

  1. Matlab入门基础 note1——赋值与小数
  2. AutodeskADN 微信公众号和我个人邮箱
  3. 目标检测:传统目标检测方法
  4. mac下 Github添加SSH keys
  5. (一)C++11 原生标准多线程:认识多线程
  6. 【Scratch考级99图】图12-等级考试scratch绘制 正八边形
  7. 十大常见web漏洞及防范
  8. 关于解决缓慢渐变维的3种方式
  9. nba底层球员_探索个人NBA球员
  10. 冲水步骤(智能马桶开发记录)