Collections.sort(...) 是如何工作的?

2023-12-14

需要明确的是,我试图找出 Collections.sort(list, new MyComp()) 方法如何按顺序调用比较方法。

我有一个包含员工及其个人号码 (k) 的 LinkedList: 数字是: {1,2,3,4,5,6} MyComparator 中的compare(Object o1, Object o2) 方法返回一些数字(与此问题无关)。 sort()如何调用方法进行比较? 它是否使用参数 1,2 then、2,3 then 3,4 then 4,5 then 5,6 来调用它?我调试了它,但有一些奇怪的序列,它跳回来并比较 1,3。

它具体比较什么?有什么图案吗?


进行的具体比较取决于内部的算法Collections.sort方法用于对元素进行排序。根据 Javadoc 的说法Collections.sort:

此类中包含的多态算法的文档通常包括实现的简要描述。此类描述应被视为实现注释,而不是规范的一部分。只要遵守规范本身,实现者就可以随意替换其他算法。 (例如,排序使用的算法不一定是归并排序,但它必须是稳定的。)

换句话说,Java 实现可以自由地使用它们想要的任何排序算法,只要它以相同的相对顺序保持相等的元素即可。这意味着如果不更多地了解具体的 Java 实现,就无法知道将进行哪些比较。 (如果我没记错的话,Java 的 Oracle 版本实际上切换了它的实现Collections.sort从 Java 7 到 Java 8,尽管我可能是错的。)

也就是说,这并不是一件坏事。编写比较器背后的想法是告诉排序方法“做任何你需要做的事情来对事物进行排序,如果你需要进行比较,这里就是这样做的方法。”这是一个很好的抽象 - 你说出如何对事物进行排序,然后排序的神奇黑匣子就会使用它来使事物按顺序排列。

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

Collections.sort(...) 是如何工作的? 的相关文章

  • java.lang.Class: 在 java 程序中初始化 log4j 属性文件时出错

    我正在尝试使用 log4j 运行独立的 java 程序 但在调试时收到以下消息 控制台上没有 log4j 相关日志 log Logger 1343 java lang Class ERROR in 18b4aac2 有人可以建议这里出了什么
  • 如何使用批处理文件实现快速排序?

    虽然通常情况下 为工作选择正确的语言是件好事 但有时尝试用一种非常不合适的语言做一些事情可能会很有启发 它可以帮助您更好地理解问题 也许你不知道have按照您认为的方式解决它 它可以帮助您更好地理解该语言 也许它支持的功能比您想象的还要多
  • 如何对 IntStream 进行逆序排序

    我正在使用 txt 文件读取数字BufferedReader 我想颠倒该流中元素的顺序 以便在收集它们时 它们将从最高到最低排列 我不想在构建数组后进行排序 因为我不知道其中可能有多少元素 我只需要最高的 N 个元素 in new Buff
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • Java:从元素创建 DOM 元素,而不是文档

    如您所知 在 Java 中创建 Dom 元素的正确方法是执行以下操作 import org w3c dom Document import org w3c dom Element Document d Element e e d creat
  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S
  • 如何将 XMP XML 块序列化为现有的 JPEG 图像?

    我有许多 JPEG 图像 其中包含损坏的 XMP XML 块 我可以轻松修复这些块 但我不确定如何将 固定 数据写回图像文件 我目前正在使用 JAVA 但我愿意接受任何能让这项任务变得容易的事情 这是目标关于 XMP XML 的另一个问题
  • 所有junit测试后的清理

    在我的项目中 我必须在所有测试之前进行一些存储库设置 这是使用一些棘手的静态规则来完成的 然而 在所有测试之后我不知道如何进行清理 我不想保留一些神奇的静态数字来引用所有测试方法的数量 我应该一直维护它 最受赞赏的方法是添加一些侦听器 该侦
  • 使用 java 按电子邮件发送日历邀请

    我正在尝试使用 java 发送每封电子邮件的日历邀请 收件人收到电子邮件 但不会显示接受或拒绝的邀请 而是将该事件自动添加到他的日历中 我正在使用 ical4j jar 构建活动 邀请 private Calendar getInvite
  • 想要开发像 Facebook 这样的网站 - 处理数百万个请求 - 高性能 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想用 Java 开发一个像 Fac
  • 如何在java中使jpeg无损?

    有没有人可以告诉我如何使用编写 jpeg 文件losslessjava中的压缩 我使用下面的代码读取字节来编辑字节 WritableRaster raster image getRaster DataBufferByte buffer Da
  • 为什么 ConcurrentHashMap::putIfAbsent 比 ConcurrentHashMap::computeIfAbsent 更快?

    使用 ConcurrentHashMap 我发现computeIfAbsent 比putIfAbsent 慢两倍 这是简单的测试 import java util ArrayList import java util List import
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • OpenJDK 版本控制

    上下文 我想确保我们系统上安装的 Java 不受 CVE 2022 21449 的影响 java version 给出 openjdk version 11 0 7 2020 04 14 LTS OpenJDK Runtime Enviro
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • struts 教程或示例

    我正在尝试在 Struts 中制作一个登录页面 这个想法是验证用户是否存在等 然后如果有错误 则返回到登录页面 错误显示为红色 典型的登录或任何表单页面验证 我想知道是否有人知道 Struts 中的错误管理教程 我正在专门寻找有关的教程 或
  • Java 编码风格、局部变量与重复方法调用

    我更喜欢使用局部变量而不是多次调用同一方法 I prefer this Vehicle vehicle person getVehicle if vehicle instanceof Car Car car Car vehicle car
  • 使用 eclipse IDE 配置 angularjs

    我想开始使用 AngularJs 和 Java Spring 进行开发 我使用 Eclipse 作为 IDE 我想配置我的 Eclipse 以使这些框架无缝工作 我知道我可能要求太多 但相信我 我已经做了很多研究 你们是我最后的选择 任何帮

随机推荐

  • 即使我使用“core.sharedrepository=group”,我仍然会时不时地被拒绝

    git config get core sharedrepository group stat c a git FETCH HEAD 644 权限显然是错误的 它需要是 664 才能使其组共享 update 我已经完成了额外的步骤 其中的所
  • 如何调整 Highcharts 轴标签中的行高/省略号

    有没有办法调整 Highcharts 中轴标签的行高 有时 对于断行标签 可能会出现重叠 间距问题 如果可以降低行高 则可以缓解这些问题 正如您在下图中较长的红色标签中看到的 自定义行高会很有帮助 有没有办法做到这一点 环境line hei
  • 在 set、vector 与 vector 之间进行选择以用作位图(位集/位数组)

    给定一系列索引 标识符 我想将每个索引映射到一个布尔值 即 interface pseudocode interface bitmap bool identifier is set unsigned int id idx const voi
  • 如何查看Oracle数据库允许的最大连接数?

    使用 SQL 检查 Oracle 数据库允许的最大连接数的最佳方法是什么 最后 我想显示当前的会话数和允许的总数 例如 目前 80 个连接中有 23 个已使用 在确定 Oracle 数据库支持的连接数时 可能会遇到一些不同的限制 最简单的方
  • Django 和 docker:将信息输出到控制台

    我正在使用 Django 它在 Docker 容器中运行 在我看来 发生了一些我无法理解的事情 有一些for语句和条件语句 我想看看到底哪里出了问题 对我来说 最简单的方法是可以将一些变量输出到控制台 这在 Django 中可能吗 就像是
  • 如何在 Salesforce 中以编程方式作废 DocuSign 信封?

    我正在使用 DocuSign For Salesforce 应用程序 作为工作流程的一部分 我们在满足某些条件时创建信封 但如果不再满足条件 我需要能够通过 Apex 触发器使信封无效 DocuSign 应用程序的文档详细介绍了如何创建信封
  • 串行块不适用于 simulink 编码器

    我使用从串行端口接收一些数据信号Serial Receive块 当然还有串行配置块 我用它来移动视频中的标记 它在模拟期间工作 但是当我使用生成 exe 文件时Simulink Coder执行期间标记不会移动 看起来它没有从串行接收数据 E
  • javascript 中的文件路径验证

    我正在尝试在 JavaScript 中验证 XML 文件路径 我的正则表达式是 var isValid a zA Z 2 a zA Z0 9 s 2 xml test str 即使路径错误 它也会返回 true 这些是有效路径 D test
  • Xamarin 表单中的渐变按钮

    如何使用 Renderer 在 Xamarin Forms 中创建具有渐变效果的按钮 现在 Xamarin Forms 4 8 可以提供渐变画笔和拖放功能等新功能 查看此链接 gt https learn microsoft com en
  • 使用 PHP ftp_get() 检索带有通配符文件名的文件

    我在 FTP 上有一个具有动态文件名的文件 该架构看起来像 ABCD 2 EFGH YYMMDD YYMMDD randomnumber TXT 日期 YYMMDD 反映前一天和当天以及randomnumbervalue 是文件中记录的计数
  • Vim - 如果文件包含特定字符串,则阻止保存/写入文件

    我想阻止 Vim 保存包含以下文本的文件 style gt 这可能位于文件中的多个位置 如果它能提出诸如 停止将样式内联 之类的错误消息 那就太好了 那也很棒 Thanks PS 我希望在尝试写入文件时触发此阻止操作 w One way 做
  • 如何为适合不同类别的标记显示不同的图标?

    我正在尝试制作一个谷歌地图 它允许用户勾选一个类别并显示这些特定位置 我已经让那部分工作了 http thedenvillehub com test hs adv scripts test html 我想做的是为每个类别提供不同的图标 一个
  • IO6 不调用 -(BOOL)shouldAutorotate

    我的应用程序中有一些我不想支持方向的视图 在didFinishLaunchingWithOptions我添加导航 UINavigationController nav UINavigationController alloc initWit
  • Keras 和错误:使用序列设置数组元素

    我在神经网络中输入多个数据源时遇到问题 我的数据框是 0 1 2 3 4 0 True True False 3 1 False True True 1 输入与前 4 列相关 输出与最后一列相关 当我训练我的神经网络时 我得到Setting
  • 如何自定义 LESS 生成的 CSS 以包含 Font Awesome?

    我要定制引导程序的CSS通过分层字体真棒作为替代品Bootstrap 默认字形 如何自定义 LESS 生成的 CSS 以包含 Font Awesome 并且在更新核心 Bootstrap 文件时不会中断 Note Font Awesome
  • 连接到我的程序时出现奇怪的行为

    我正在使用 Twisted 来实现某种服务器 当我测试它时 它收到的第一行总是很奇怪 Starting Server New connection from 192 168 1 140 192 168 1 140 NAME Blurr 19
  • 在 SQL Server 中,如何通过链接服务器连接查询 Oracle Timestamp 列?

    我在 oracle 中进行的查询不适用于带有 sql server 2008 的链接服务器 为链接服务器 ORACLE 提供的 OLE DB 提供程序 MSDAORA 列 DATETIME INS 的元数据无效 数据类型不是 支持的 查询
  • 终极清洁/安全功能

    我有很多用户输入 GET and POST 此刻我总是写mysql real escape string GET var 我想知道你是否可以制作一个功能来保护 转义和清理 GET POST立即数组 因此您不必每次处理用户输入等时都处理它 我
  • 实体框架存储过程和 POCO

    我需要有关使用 Entity Framwork 4 x 存储过程将数据返回到 POCO 对象的建议 我不想将数据从实体对象复制到 POCO 对象 我想执行一个存储过程并将数据直接加载到我的 POCO 类中 有没有办法做到这一点 我是否需要像
  • Collections.sort(...) 是如何工作的?

    需要明确的是 我试图找出 Collections sort list new MyComp 方法如何按顺序调用比较方法 我有一个包含员工及其个人号码 k 的 LinkedList 数字是 1 2 3 4 5 6 MyComparator 中