从两个字符串中创建一个唯一的哈希

Pet*_*ter 10 algorithm scala

任何人都可以想到一种方法来从两个字符串中创建一个唯一的哈希?确保的东西:

hash(string1,string2) = hash(string2,string1).

我总是可以在地图中的两个不同值下存储相同的引用,但我想:必须有更好的方法......

Kim*_*bel 18

另一种方法是散列两个字符串和xor结果.由于xor是可交换的,因此顺序无关紧要.如果哈希值相等,请不要对它们进行xor以避免与其他对相同字符串的冲突.


Rex*_*err 9

你想要快,还是想要变得更好?对各个哈希码的任何对称操作都会产生你想要的东西; +,*并且^都是不错的选择; ^如果两者相同则产生0,所以你通常需要一个if来捕捉它; +更有可能产生碰撞,*但两者都不是很好,因为内在hashCode方法String很糟糕:

scala> "BB".hashCode == "Aa".hashCode  // Seriously?!
res40: Boolean = true
Run Code Online (Sandbox Code Playgroud)

如果您希望字符串不会发生碰撞,请使用scala.util.MurmurHash.stringHash字符串(2.9; scala.util.hashing.MurmurHash.stringHash在2.10中),然后使用上述方法之一.


Jua*_*mpa 8

那么你可以在对它们进行散列之前尝试"排序"这两个字符串,这样任何一对字符串都将以相同的顺序处理.


Bil*_*ard 7

检查它们是否按字母顺序排列并在它们连接之前交换它们并对结果进行散列.