Ped*_*ges 3 java comparison uuid
JavasUUID类实现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())));
Run Code Online (Sandbox Code Playgroud)
我的主要问题是,几乎所有其他工具和语言似乎都与RFC 4122一致且兼容,但 Java 不是。
在我的特定情况下,我使用postgresql 13并按包含 UUID 的列进行排序,例如myColumnd::UUID或myColumnd::text(使用uuid_v4),但由此获得的顺序与使用 Java 获得的顺序不同。
好吧,在一种情况下,您比较 UUID,在另一种情况下,您比较两个按词汇顺序排列的字符串。
根据 Javadoc:
如果 UUID 不同的最重要字段大于第一个 UUID,则两个 UUID 中的第一个大于第二个。
| 归档时间: |
|
| 查看次数: |
673 次 |
| 最近记录: |