vojelo
vojelo

Reputation: 35

String.hashCode same value for different sequences

What could the problem be? I expect different value of s1.hashCode ad s2.hashCode, but they are the same.

dart --version // Dart VM version: 1.21.1 (Fri Jan 13 09:44:01 2017) on "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
}

When I try this code in DartPad - everything is going well, values different.

Upvotes: 1

Views: 790

Answers (1)

matanlurey
matanlurey

Reputation: 8624

In many real programs, perfect hash functions do not exist.

That means that different objects may potentially collide (i.e. have the same hashCode, in Dart). Most implementations of things like a HashMap fall back on using an equality check on collisions.

You don't have to worry about this when using the standard library:

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

Upvotes: 2

Related Questions