为什么 ConcurrentSkipListSet 升序迭代器比降序迭代器“更快”?

2024-01-23

我在 ConcurrentSkipListSet 上使用 DescendingIterator 方法。我刚刚检查了文档并注意到以下评论:

“升序视图及其迭代器比降序视图及其迭代器更快。”

See https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListSet.html#descendingIterator-- https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListSet.html#descendingIterator--

不幸的是,它没有提供这方面的更多信息。有什么样的性能差异?这很重要吗?为什么会有性能差异?


如果您查看维基百科页面跳过列表 https://en.wikipedia.org/wiki/Skip_list您将看到它们实际上是一种复杂形式的链接列表,其中链接按照列表条目的排序方向进行。 (该图清楚地说明了这一点......)

当您向前遍历跳过列表时,您只需跟随链接即可。每个next()call 是一个 O(1) 操作。

当你反向遍历跳跃列表时,每个next()呼叫必须找到钥匙before最后一个键返回。这是一个 O(logN) 操作。

(但是,向后遍历跳跃列表仍然比向后遍历单链表快得多。对于每个来说,这将是 O(N)next()称呼 ...)

如果你仔细观察,你会发现ConcurrentSkipListSet实际上是一个包装ConcurrentSkipListMap。在那堂课上,Node映射的跳跃列表表示中的对象形成单链接链......在升序键方向上。 (从前面)可以看出,升序迭代比降序迭代更快。

性能差异将非常显着,并且随着集合大小的增加,由于 O(1) 与 O(logN) 的差异,这种差异将变得更加显着。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 ConcurrentSkipListSet 升序迭代器比降序迭代器“更快”? 的相关文章

  • 如何重定向到WEB-INF文件夹中的JSP

    我有一个带有 NAV 的 jsp 其中还包含 UL 和以下元素 如下面的代码所示
  • @Nullable 和 SonarQube “有条件执行的块应该可达”警告

    包有以下package info java ParametersAreNonnullByDefault package foo import javax annotation ParametersAreNonnullByDefault 类有
  • Java泛型类型要么扩展要么是父类

    我正在寻找一些如下所示的代码 public class Parent
  • 为 Nimbus 外观设计简单的单元渲染器

    我有一个简单的单元格渲染器 它由一些组成JLabels 渲染器本身扩展JPanel 并且我正在尝试让它在 Nimbus 的外观和感觉中合理地渲染 基本上发生的事情是在lighter行 正如 Nimbus 所具有的交替行着色 我的特定单元格渲
  • Gradle中的build-by-convention深度解释是什么?

    The 摇篮用户指南 http www gradle org docs current userguide userguide html经常提到 Gradle 是陈述性的和用途按惯例构建 这是什么意思 据我了解 这意味着 例如 在java插
  • 如何设置Java线程的CPU核心亲和力?

    我搜索了以前关于类似主题的帖子 但找不到合适的答案 因此提出这个问题 非常感谢您帮助回答 我知道在 Linux 中通过任务集命令设置进程与特定 CPU 核心的关联性 但我想设置 Java 线程与特定 cpu 核心的亲和力 以便属于同一进程的
  • 使用 Windows 锁定屏幕后删除 Kerberos 缓存票证

    无论如何 有没有办法阻止 Kerberos 缓存的票证在 Windows 进入锁定屏幕后被删除 首次登录 Windows 时 klist exe 显示 2 个缓存票证 但是 发生 Windows 锁屏事件后 klist exe 显示 0 个
  • 如何从网上获取源代码?

    我正在尝试从 Web 获取 HTML 源代码 我尝试这样做 u new URL url URLConnection con u openConnection con setRequestProperty User Agent Mozilla
  • 从两个数组中查找公共文件

    我正在尝试从两个数组中查找通用名称文件 我已将两个不同文件夹的文件名保存在两个不同的数组中 现在我正在创建一个通用文件数组 其中包含具有通用名称的文件 filenames 1 包含文件夹 1 中文件名称的数组 filename2 包含文件夹
  • Java检测音频文件(mp3)

    我有这段代码可以读取 mp3 文件 import java io File import java io IOException import javax sound sampled AudioSystem import javax sou
  • Java 8 中函数类型全等 lambda 表达式的用法

    我对 的定义和用法感到困惑 Stream collect Supplier
  • 在 Tomcat 中触发内部 ServletRequest

    我正在使用 Quartz 来安排 Web 应用程序的后台任务 其中一些任务只是针对同一 Web 应用程序发出请求 我想避免依赖于任何类型的网络设置 例如 如果从数据中心内发出带有我自己域名的请求 则可能无法正确路由 是否有一个 Java A
  • 使用 testcontainer 作为 Dockerfile 的一部分运行测试

    我的 dockerfile 看起来像这样 FROM maven 3 jdk 11 slim COPY pom xml COPY src src RUN mvn clean install 这意味着构建的一部分是单元测试的执行 一些单元测试使
  • 是否有适合 Java 1.4 和 SE (Swing) 应用程序的优秀 DI 框架?

    我正在寻找一个适用于在 JDK 1 4 下运行的 Java SE Swing 应用程序的依赖注入框架 有没有我可以使用的推荐 DI 框架 Guice 和其他基于注释的框架已经退出 我不想搞乱像 Retroweaver 这样的东西 另外 Sp
  • JavaFX颜色选择器的语言

    有没有办法改变语言ColorPicker的文本 例如 自定义颜色 当前颜色 新颜色 色相 饱和度 亮度 不透明度 保存 使用 取消 编辑 以下答案适合那些需要更多内容的人exotic语言 如果您使用其中之一 de es fr it ja k
  • 从java小程序获取正确的本地IP地址

    我想从我的 java 小程序确定本地 IP 地址 问题是当同一台机器上有多个 IP 地址时 该机器具有 LAN 和互联网连接 掌上电脑 VMWare 这是我的测试 public static void main String args tr
  • Spring MVC 和复选框

    我正在使用 Spring MVC 3 0 并且不能完全看到这个问题的所有部分 我的控制器将生成一个域对象列表 假设有一个简单的 User 对象 具有firstName lastName age 和role 属性 我想在表中输出该用户列表 每
  • 无法以联觉方式绘制像素、Pi 数

    我想将 pi 数字的每个数字打印为彩色像素 因此 我得到一个带有 pi 数字的输入 然后将其解析为一个列表 每个节点包含一个数字 我知道 稍后我将使用一个数组 但我从来没有把它画到屏幕上 有人能帮我看看我错在哪里吗 import java
  • Java中不同格式的字符串解析为日期

    我想转换String to Date以不同的格式 例如 我从用户那里得到 String fromDate 19 05 2009 i e dd MM yyyy format 我想转换这个fromDate作为日期对象 yyyy MM dd fo
  • JVM锯齿状空闲进程

    我目前正在进行一项涉及 JVM 及其内存使用工作原理的研究 我不明白的是 JVM在空闲时用什么填充它的内存 只是为了在堆几乎达到时释放它 为什么使用的内存不只有一条平线 顺便说一句 这个 java 应用程序托管在 glassfish 上 但

随机推荐

  • 将 AudioBufferList 转换为 CMSampleBuffer 会产生意外结果

    我正在尝试转换AudioBufferList我从音频单元得到的CMSampleBuffer我可以传递到AVAssetWriter保存麦克风中的音频 这种转换有效 因为我为执行转换而进行的调用不会失败 但记录最终会失败 并且我在日志中看到一些
  • 为什么我的 MVC 应用程序中有两个 web.config 文件

    Views 文件夹中有一个 应用程序的根目录中还有另一个 我想注册一个自定义处理程序 但我不明白代码应该放在哪里 我在集成模式下运行 IIS7 所以我必须添加
  • C++11 中的线程池

    相关问题 关于 C 11 C 11 std 线程池 https stackoverflow com questions 12993451 c11 stdthread pooled C 11 中的 async launch async 是否会
  • NSScrollView 具有未剪辑的内容视图?

    有没有办法设置我的滚动视图不剪辑其内容 这是一个NSTextView 我有 NSScrollView 的子类并想要它的内容not被剪裁到其边界 我尝试过重写 BOOL wantsDefaultClipping return NO in My
  • 如何让 Flask-SQLAlchemy 在出现异常时自动回滚会话?

    我想设置一个使用以下构建的应用程序Flask SQLAlchemy如果视图引发在视图代码外部冒泡的异常 即未在内部捕获 则回滚对数据库所做的所有更改 我希望它能够工作 即使某些对象在子事务中自动或直接通过session commit 类似的
  • 在keras中构建多输出模型时出错

    我正在尝试在 Keras 中创建一个多输出模型 该模型从卷积开始 旨在叠加两个独立密集层的结果 我为回归任务创建了一些随机数据 其中x1是输入和df是标签 这df包含三列 定义训练和测试拆分并形成模型后 我在拟合模型时收到错误 谁能帮我纠正
  • 如何在 Android 中的搜索输入字段旁边添加下拉菜单?

    在我的 HTC Desire Froyo 上的系统范围搜索中 我看到搜索输入字段左侧有一个小下拉菜单 允许选择我要搜索的位置 全部 网络 应用程序 我怎样才能实现这个在我的一个应用程序中 Google 开发者网站上的搜索教程没有解决这个问题
  • 配置 MapReduce 作业时使用多个 InputFormat 类

    我想编写一个可以处理文本和 zip 文件的 MapReduce 应用程序 为此 我想使用不同的输入格式 一种用于文本 另一种用于 zip 可以这样做吗 从 ChrisWhite的答案延伸一点 你需要的是使用自定义InputFormat an
  • 如何修复 Xcode“DTAssetProviderService 无法启动..”错误?

    我已经升级了 macOS Sierra Developer Preview 但是我的Xcode 7 3 1尝试在模拟器上运行我的项目时出现以下错误 此外 Generic to archieve 还给出了另一个错误 例如 此外 对于存档 发生
  • 如何将此 SQL 查询转换为 LINQ 或 Lambda 表达式?

    我有以下 SQL 查询 SELECT C ID C Name FROM Category C JOIN Layout L ON C ID L CategoryID JOIN Position P ON L PositionID LIKE C
  • 无法使用 Desktop Docker 设置通过节点端口访问 Kubernetes 服务

    我在 Windows 10 上使用 Docker Desktop 我生成 kubernetes NodePort 服务以从客户端 Web 浏览器访问 http 10 110 201 24 30008 hello praveen http 1
  • 停留在基本的 Linq to XML 查询上

    我正在尝试从 namecheap 沙箱 api 中提取信息 但无法弄清楚为什么我的 linq 查询不起作用 这是一个示例响应 XML
  • php 中的文件锁定

    我有一个新人 隔壁的少年 编写了一些 php 代码来跟踪我网站上的一些使用情况 我不熟悉 php 所以我想问一些关于并发文件访问的问题 我的本机应用程序 在 Windows 上 偶尔会通过点击包含我的 php 脚本的 URL 来将一些数据记
  • 从地图外部将对象拖放到 Google 地图中:标记未放置在正确的纬度/经度处

    我想从地图外部将一个对象拖到我的 Google 地图 API V3 中 经过一番研究 我发现这个非常有帮助的帖子 https stackoverflow com a 5921814 1866810我尝试将其适应我的项目 主要思想是在地图上拖
  • MVC路由问题

    我想按如下方式设置路由 Profile Edit gt 编辑操作的路由 Profile Add gt 添加操作的路由 Profile username gt 使用参数 username 路由到 Index 操作 因为操作用户名不存在 所以我
  • EventBus 和 RxJava 有什么区别? [复制]

    这个问题在这里已经有答案了 我对 android 中的 EventBus 和 RxJava 之间的区别感到困惑 我需要实现其中之一来解决我的问题 即在完成某些更改后通知某些组件 以便它们可以更新其状态 另外 我读到 EventsBus 已因
  • Java 禁用 dpi 感知不起作用

    我正在尝试运行 Java 应用程序 Dsun java2d dpiaware false争论但什么也没发生 我希望有一个模糊的用户界面 但对于正常大小的图标和字体 这个标志似乎不起作用 我在 Windows 8 1 上使用 JDK 1 8
  • 从 pySpark SQL 写入远程 mysql 数据库 (JDBC) 获取新行 id

    我正在使用 pyspark sql 使用 JDBC 在远程 mysql 数据库中创建行 我有两张桌子 parent table id value and child table id value parent id 所以每一行parent
  • 如何关闭颜色并删除 Git 日志中的时间?

    正如标题所说 如何关闭颜色并去除时间 因为我需要将输出复制到pbcopy 但颜色模式会使输出包含特殊字符 我已将以下内容添加到 gitconfig文件 以删除大部分颜色 color ui false branch false diff fa
  • 为什么 ConcurrentSkipListSet 升序迭代器比降序迭代器“更快”?

    我在 ConcurrentSkipListSet 上使用 DescendingIterator 方法 我刚刚检查了文档并注意到以下评论 升序视图及其迭代器比降序视图及其迭代器更快 See https docs oracle com java