java - 为什么 UUID#compareTo 与 RFC 4122 不兼容?

标签 java comparison uuid

概述
Java UUID类实现 Comparable .但是它实现的顺序似乎与 RFC 4122 中给出的规范不兼容。 .
特别是,它与其字符串表示( uuid1.toString().compareTo(uuid2.toString()) )所隐含的自然顺序不一致,这与 RFC 一致。

例子
您可以使用以下代码重现并观察问题:

UUID uuid1 = UUID.randomUUID();
UUID uuid2 = UUID.randomUUID();

Assert.assertEquals(
        Math.signum((int) uuid1.compareTo(uuid2)),
        Math.signum((int) uuid1.toString().compareTo(uuid2.toString())));

细节
我的主要问题是几乎所有其他工具和语言似乎都与 RFC 4122 一致并兼容。 ,但 Java 不是。
在我的特殊情况下,我使用 PostgreSQL 13 并按包含 UUID 的列排序,例如myColumnd::UUIDmyColumnd::text (使用 uuid_v4 ),但我由此获得的顺序与使用 Java 获得的顺序不同。

最佳答案

好吧,在一种情况下,您比较 UUID,在另一种情况下,按词法顺序比较两个字符串。
根据 Javadoc:

The first of two UUIDs is greater than the second if the most significant field in which the UUIDs differ is greater for the first UUID.

关于java - 为什么 UUID#compareTo 与 RFC 4122 不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69815008/

相关文章:

java - @JsonUnwrapped 禁用 Jackson 的 fail_on_unknown 属性

uuid - HardwareIdentification.GetPackageSpecificToken API 在 Windows 10 中发生了变化

Android:蓝牙连接、套接字和线程

python - Python uuid.uuid4 是否足够强大以用于密码重置链接?

java - 字符串比较抛出 NullPointerException

java - 如何通过共享屏幕打开我的 Android 应用程序?

java - 从 Netsuite 中保存的搜索中获取字段值为空

Java Web Sart Ubuntu 12.1。加载资源(图片)

javascript - 为什么 MongoDB 查询使用 $gt 和 $lte 而不是 > 和 <=?

MySQL从一张表中查询 - 选择同一字段两次