对 Java 中 *any* 类的所有实例进行全排序

2024-06-19

我不确定以下代码是否能确保 Comparator 的 Javadoc 中给出的所有条件。

class TotalOrder<T> implements Comparator<T> {

    public boolean compare(T o1, T o2) {
        if (o1 == o2 || equal(o1, o2)) return 0;

        int h1 = System.identityHashCode(o1);
        int h2 = System.identityHashCode(o2);

        if (h1 != h2) {
            return h1 < h2 ? -1 : 1;
        }

        // equals returned false but identity hash code was same, assume o1 == o2
        return 0;
    }

    boolean equal(Object o1, Object o2) {
        return o1 == null ? o2 == null : o1.equals(o2);
    }
}

上面的代码是否会对任何类的所有实例强加总排序,即使该类没有实现 Comparable ?


嘿,看看我发现了什么!

http://gafter.blogspot.com/2007/03/compact-object-comparator.html http://gafter.blogspot.com/2007/03/compact-object-comparator.html

哦,是的,我忘记了 IdentityHashMap(仅限 Java 6 及更高版本)。只需要注意释放比较器即可。

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

对 Java 中 *any* 类的所有实例进行全排序 的相关文章

  • 没有绑定 play.db.Database 的实现

    我在使用 hikaricp 时访问数据库时遇到问题 这是我的reference conf play modules enabled play api db DBModule enabled play api db HikariCPModul
  • Arrays.copyOf 产生浅拷贝还是深拷贝?

    对于是否应该这样做 似乎存在很多困惑和不同的意见 1 和其他来源 Arrays copyOf将产生深拷贝或浅拷贝 此测试表明副本很深 String sourceArray new String Foo String targetArray
  • 如何使用 selenium 和 junit 测试多个浏览器(版本)

    我刚刚发现了硒 一个很棒的工具 我计划运行 使用 selenium ide 生成的 junit4 代码 但我需要它与许多浏览器 网络驱动程序一起运行 这个用例有 junit java 模式吗 我的第一个想法是使用 RunWith Param
  • 通过单击 imageView 打开活动

    我正在尝试做一个ImageView打开另一个活动 public class MainActivity extends Activity Override protected void onCreate Bundle savedInstanc
  • 如何使用 C 中的 Banker's Rounding 将 double 舍入为 int

    我想编写一个函数 使用银行家的舍入方法将双精度数舍入为整数 将一半舍入为偶数 http en wikipedia org wiki Rounding Round half to even http en wikipedia org wiki
  • OpenGL ES 2.0 只绘制一次对象

    首先我要说的是 很抱歉今天问了这么多问题 所以 我有一个圈子的课程 我有一个包含 3 个圆形实例的数组列表 每个实例都有不同的 x 坐标来绘制 不管出于什么原因 OpenGL ES 2 0 只绘制其中之一 尽管我调用所有这些来绘制 我检查了
  • 使用具有不同参数的 Jackson for List 将 JSON 映射到 pojo

    JSON 格式 0 cast showname woh pagle type Episodes video src video mp4 DRM False 这里的问题是我遇到以下异常 org codehaus jackson map Jso
  • 克隆在幕后是如何工作的?

    克隆不会调用对象构造函数来创建对象的副本 那么clone使用什么算法呢 我正在寻找本机方法克隆的实现细节 任何指示将不胜感激 请注意 我知道克隆的缺点 protected native Object clone 我不太清楚 我需要查看本机代
  • LRU、FIFO、随机

    当出现页面错误或缓存未命中时 我们可以使用最近最少使用 LRU 先入先出 FIFO 或随机替换算法 我想知道 哪一个提供了最好的性能 也称为未来缓存丢失 页面错误最少的可能性 架构 Coldfire 处理器 没有愚蠢的问题 这句话非常适合这
  • Java 中的工作线程

    我需要通过线程每分钟从表中读取数据 然后执行某些操作 任务完成后 我是否应该启动一个线程并将其置于睡眠模式 1 分钟 然后再次检查表是否有数据 再次执行任务并休眠 1 分钟 这是正确的方法吗 任何人都可以为我提供一些 Java 示例代码来执
  • 从命令行进行 Liquibase 回滚不起作用

    我正在 Windows 环境中执行一个 Tomcat 应用程序 部署时会在 Oracle 数据库上创建 更新数据库架构 为此 我使用 Liquibase SDK 3 3 2 所以基本上我调用 SDK 并告诉它从我的changelog xml
  • 如何规划庭院灯最有效的路线

    我正在尝试挂一些庭院灯 基于另一个问题 https cs stackexchange com questions 80134 christmas light route efficiency我问 我意识到我需要一种算法来解决路由检查问题 h
  • Java 8 LocalDate Jackson 格式

    For java util Date当我做 JsonFormat shape JsonFormat Shape STRING pattern dd MM yyyy private Date dateOfBirth 然后在我发送时在 JSON
  • Spring MVC @RequestBody 不适用于 jquery ajax?

    这是我的ajax请求 var dataModel name1 value1 name2 value2 ajax url testURL type POST async false contentType application json d
  • 找出网络上所有活动机器的IP

    如何找到 LAN 上所有当前活动计算机的 IP 如何编写一个可以在任何子网上运行的通用程序 我目前正在这样做 尝试 isReachable 是否到达我子网上的所有机器 如果他们这样做 请存储他们的 IP 地址 无论如何 是否有其他方法可以手
  • Java中C是A的子类时“C c = new C()”和“A c = new C()”的区别

    假设我们有类 A 作为父类 以及扩展它的类 C class A void m System out println A m class C extends A Override void m System out println C m 和
  • java 未知深度的嵌套哈希图

    我有一个要求 我需要有一个嵌套的哈希图 但深度将在运行时决定 例如 如果在运行时 用户说 3 那么我的哈希图应该是这样的 HashMap
  • 如何找到权重为 1、0、-1 且成本精确为 0 的多维路径

    我得到了一个有向图 其中有 n 个节点和边 向量的权重 每个向量的长度为 m 为数字 1 0 1 我想找到从一个节点到另一个节点 我们可以多次访问节点 的任何路径 或者说这样的路径不存在 使其权重之和等于仅由零组成的向量 我正在考虑暴力回溯
  • JSON 解析为 Java - Android 应用程序

    我需要在 Java Android 应用程序中解析 json 字符串的帮助 JSON 文件的文本 data columns location id name description latitude longitude error type
  • 使用迭代器时无限循环

    Set key1 map keySet Iterator it1 key1 iterator int cnt 0 while it1 hasNext cnt 这段代码导致无限循环的可能性有多大 实际上这会导致无限循环 我怀疑是因为我没有服用

随机推荐