String.hashCode为不同序列的相同值

时间:2017-02-04 23:09:06

标签: dart

问题是什么?我期望s1.hashCode ad s2.hashCode的值不同,但它们是相同的。

dart --version // Dart VM版本:1.21。1(2017年1月13日星期五09:44:01)“linux_x64”

main() {
  String s1 = "x-14-9";
  String s2 = "f-107";
  print(s1.hashCode);   // 939886624
  print(s2.hashCode);   // 939886624
  print("identical - ${identical(s1,s2)}");   // identical - false
  print("== - ${s1 == s2}");                  // == - false
}

当我在DartPad中尝试此代码时 - 一切进展顺利,价值观不同。

1 个答案:

答案 0 :(得分:2)

在许多真实的程序中,perfect hash functions不存在。

这意味着不同的对象可能碰撞(即在Dart中具有相同的hashCode)。像HashMap这样的大多数实现都依赖于对冲突的等式检查。

使用标准库时,您不必担心这个问题:

var map = new Map<String, int>();
map['x-14-9'] = 1;
map['f-107'] = 2;
print(map); // Should print both key-value pairs.