dart 如何计算哈希码

vltsax25  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(167)

当我们写:

"exampleString".hashCode

有没有一个通用的数学方法,一些算法来计算它,或者它从Dart laungage的其他地方得到它?String值的散列码在其他语言中,比如java,c++......,还是一样的吗?

5ssjco0h

5ssjco0h1#

为了回答您的问题,散列码是Dart特定的,甚至可能是执行运行特定的。要了解各种散列码是如何工作的,请查看任何给定类的源代码。
精细手册说:
散列代码是一个整数,表示影响运算符==比较的对象的状态。
所有的对象都有哈希码。Object实现的默认哈希码只代表对象的标识,就像默认运算符==实现只在对象相同时才认为它们相等一样(参见identityHashCode)。
如果operator ==被重写为使用对象状态,则哈希代码也必须被更改为表示该状态,否则对象无法在基于哈希的数据结构(如默认的Set和Map实现)中使用。
对于根据运算符==彼此相等的对象,哈希代码必须相同。只有当对象的更改影响相等性时,对象的哈希代码才应更改。对哈希代码没有进一步的要求。它们在同一程序的执行之间不需要一致,并且没有分发保证。
不相等的对象允许有相同的哈希码,甚至在技术上允许所有示例都有相同的哈希码,但如果冲突发生得太频繁,可能会降低基于哈希的数据结构(如HashSet或HashMap)的效率。
如果子类覆盖了hashCode,它也应该覆盖operator ==操作符以保持一致性。
最后一点很重要。如果两个对象被你想要的任何策略视为==,它们也必须总是有相同的哈希码。相反的情况不一定是真的。

相关问题