Java 哈希值 : how to make them efficiently comparable?

标签 java hash comparison comparable

我有一对散列值,例如

  1. 128ecf542a35ac5270a87dc740918404;d603ac0c04b9d08974482ae7fd4cf55
  2. a1288b1c7e2257a90bad9bdfb7690fbb;f23828e312d90cb7fdadd6479236119c
  3. ................................;................................

我想让每一对都具有可比性,意思是:

128ecf542a35ac5270a87dc740918404;d603ac0c04b9d08974482ae7fd4cf55d

保持原样;

的情况下

d603ac0c04b9d08974482ae7fd4cf55d;128ecf542a35ac5270a87dc74091840

4、应该变成

128ecf542a35ac5270a87dc740918404;d603ac0c04b9d08974482ae7fd4cf55d

我的主要目标是拥有一个特定的函数,该函数比较一对的两个散列值并返回一对,其中值根据某种规则排序。规则本身并不重要,唯一的要求是,它应该非常快并且应该始终给出相同的结果,因为输入是 (unique1,unique2) 或 (unique2,unique1)

谢谢!

一个明显但效率低下的方法是仅对每个哈希值中包含的数字求和并比较它们,然后将总和较小的哈希值作为对中的第一个元素,将较大的元素放在第二个元素中位置。

最佳答案

只需用通常的字符串比较(compareTo)比较两个字符串,把较小的放在前面。这将保证你想要的。我希望这会非常便宜,因为实际上哈希值在前几个字符中已经不同,然后比较不需要查看其余字符串。此外,无论如何,访问和比较非常少的字节数(如您的示例所示)是如此便宜,以至于与程序执行的其他操作相比,只有经常执行此操作才能看到性能影响。

如果您没有字符串形式的值,而是字节数组或类似的东西,只需自己实现一个简单的字典顺序比较。

关于Java 哈希值 : how to make them efficiently comparable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11032858/

相关文章:

java - 网络统计

java - Java Swing 应用程序中类似 Qtip 的气泡

.net - 如何比较类定义

java - 系列线在 JFreeChart 中未正确显示

java - 从 Firebase 中的另一个键附加属性

javascript - JS 中检测前导零数量的最快方法

perl - 在 Perl 中测试两个散列键是否具有相同的结构

ruby - Ruby 中判断变量是散列还是数组的优雅方法是什么?

comparison - grep -v 在 Solaris 10 中不起作用

java - 为什么HashMap的get()在Java中会同时比较hash值和key?