Java哈希值:如何使它们有效可比?

我有一对哈希值,如

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

我想让每一对与其他对比,意思是:

128ecf542a35ac5270a87dc740918404;d603ac0c04b9d08974482ae7fd4cf55d

保持原样;

如果是

d603ac0c04b9d08974482ae7fd4cf55d;128ecf542a35ac5270a87dc74091840

4,它应该成为

128ecf542a35ac5270a87dc740918404;d603ac0c04b9d08974482ae7fd4cf55d

我的主要目标是有一个特定的函数,它比较一对的两个哈希值,并根据一些规则返回一个具有在其中排序的值的对.规则本身并不重要,唯一的要求是,它应该非常快,并且应该总是给出相同的结果,因为输入是(unique1,unique2)或(unique2,unique1)

谢谢!

一种显而易见但效率低下的方法是仅将每个散列值中包含的数字相加并比较它们,并将散列值与较小的和作为对中的第一个元素,将较大的和作为第二个位置.

解决方法:

只需将两个字符串与通常的字符串比较(compareTo)进行比较,然后将较小的字符串放在第一位.这将保证您想要的.我希望这是非常便宜的,因为实际上哈希值在前几个字符中已经有所不同,然后比较不需要查看其余的字符串.此外,访问和比较非常少的字节数(如在您的示例中)是如此便宜,无论如何,只有当您比程序执行的其他操作更频繁地执行此操作时,您才能看到性能影响.

如果你没有将值作为字符串,而是作为字节数组或类似的东西,只需要自己实现一个简单的字典比较.

上一篇:Java | Integer


下一篇:java反射调用一个带有Comparable []参数的方法