哈希代码是如何计算的



当我们写入时:

"exampleString".hashCode

有没有一种通用的数学方法,某种算法来计算它,或者它从达特发射场的其他地方得到它?String值的哈希代码在其他语言(如java、c++…(中是否仍然相同。。。?

为了回答您的问题,哈希代码是特定于Dart的,甚至可能是特定于执行运行的。要了解各种散列代码是如何工作的,请查看任何给定类的源代码。

精细手册上写着:

哈希码是一个整数,表示影响运算符==比较的对象的状态。

所有对象都有哈希代码。Object实现的默认哈希代码仅表示对象的标识,与默认运算符==实现仅在对象相同的情况下才认为对象相等(请参见identityHashCode(相同。

如果重写运算符==以使用对象状态,则还必须更改哈希代码以表示该状态,否则该对象不能在基于哈希的数据结构中使用,如默认的Set和Map实现。

根据运算符==,对于彼此相等的对象,哈希码必须相同。只有当对象以影响相等的方式更改时,对象的哈希代码才应该更改。对散列码没有进一步的要求。它们不需要在同一程序的执行之间保持一致,并且没有分发保证。

允许不相等的对象具有相同的哈希代码。技术上甚至允许所有实例都有相同的哈希代码,但如果冲突发生得太频繁,可能会降低基于哈希的数据结构(如HashSet或HashMap(的效率。

如果子类重写hashCode,它也应该重写运算符==以保持一致性。

最后一点很重要。如果两个对象被认为是==,那么它们也必须始终具有相同的哈希代码。相反的情况不一定成立。

最新更新