我有一对散列值,例如
- 128ecf542a35ac5270a87dc740918404;d603ac0c04b9d08974482ae7fd4cf55
- a1288b1c7e2257a90bad9bdfb7690fbb;f23828e312d90cb7fdadd6479236119c
- ................................;................................
我想让每一对都具有可比性,意思是:
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/