Scala设置哈希码

use*_*419 1 scala hashcode

假设我们在Scala中有三组字符串.一个有元素A,B,C.两个具有元素B,C,D.三个有元素J,K,I.

我的第一个问题是,是否有任何方法可以使这两组中的任何两个的哈希码相同?我的第二个问题是,如果我将D添加到One和A到Two以获得新的Set One.n和Two.n,则One.n和Two.n的哈希码是相同的吗?

Lui*_*hys 6

问题1)总的来说是的,完全有可能.哈希码的长度有限.套装可以是任何尺寸.因此,哈希码不能是唯一的(尽管通常它们是唯一的).

问题2)为什么不试试呢?

scala> val One = collection.mutable.Set[String]("A", "B", "C")
One: scala.collection.mutable.Set[String] = Set(A, B, C)

scala> One.hashCode
res3: Int = 1491157345

scala> val Two = collection.mutable.Set[String]("B", "C", "D")
Two: scala.collection.mutable.Set[String] = Set(B, D, C)

scala> Two.hashCode
res4: Int = -967442916

scala> One += "D"
res5: One.type = Set(A, B, D, C)

scala> Two += "A"
res6: Two.type = Set(B, D, A, C)

scala> One.hashCode
res7: Int = -232075924

scala> Two.hashCode
res8: Int = -232075924
Run Code Online (Sandbox Code Playgroud)

所以,是的,正如您所预料的那样,因为您希望==这两个实例的方法都是正确的.

  • `hashCode`的规则是:如果你的对象`a`,`b`报告相等,即,如果`a.equals(b)`,那么`a.hashCode == b.hashCode`(但不是另一个方式). (3认同)