问题是什么?我期望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中尝试此代码时 - 一切进展顺利,价值观不同。
答案 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.