任何人都可以想到一种方法来从两个字符串中创建一个唯一的哈希?确保的东西:
hash(string1,string2) = hash(string2,string1).
我总是可以在地图中的两个不同值下存储相同的引用,但我想:必须有更好的方法......
你想要快,还是想要变得更好?对各个哈希码的任何对称操作都会产生你想要的东西; +,*并且^都是不错的选择; ^如果两者相同则产生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中),然后使用上述方法之一.