Keerthi Kumar

Ranch Hand

Posts: 105

Keerthi Kumar

Ranch Hand

Posts: 105

Mina Daoud

Ranch Hand

Posts: 88

Keerthi Kumar

Ranch Hand

Posts: 105

Mina Daoud

Ranch Hand

Posts: 88

Hauke Ingmar Schmidt

Rancher

Posts: 436

2

posted 7 years ago

java.lang.Object#hashCode() returns (should return) the same hashCode for Objects that are equal.

There can be no assumption made what hashCode returns for objects that are not equal.

This...

would be a legitim but not very useful implementation for the method.

As java.lang.String is final you can't change the hashCode implementation. There are different strings that produce the same hashcode, but it is unlikely. (Even passwords are typically stored only as hashes and compared based on hashs - which would be a quite bad idea with the hashcode implementation from above ^^.)

There can be no assumption made what hashCode returns for objects that are not equal.

This...

would be a legitim but not very useful implementation for the method.

As java.lang.String is final you can't change the hashCode implementation. There are different strings that produce the same hashcode, but it is unlikely. (Even passwords are typically stored only as hashes and compared based on hashs - which would be a quite bad idea with the hashcode implementation from above ^^.)

posted 7 years ago

Ummm.... no.

Let's consider just the upper and lower-case Latin alphabet, which is a total of 52 letters. How many different 8-character strings could we make? We can choose any letter for the first, and any letter for the second, etc. Altogether there are 52^8 different strings of 8 Latin letters. That's 53459728531456 different Strings, which is

The chances that any two Strings will have the same hashCode() values is quite small. The chances that, out of a collection of Strings, two of them will have the same hashCode() are rather large! This surprising statistical result is often called the Birthday_paradox. Did you know if you get 23 people in a room, the chances are 50-50 that two people among them share the same birthday?

Let's consider just the upper and lower-case Latin alphabet, which is a total of 52 letters. How many different 8-character strings could we make? We can choose any letter for the first, and any letter for the second, etc. Altogether there are 52^8 different strings of 8 Latin letters. That's 53459728531456 different Strings, which is

*far*more than the 4294967295 different values the int that hashCode() returns can hold. This means that even for such short Strings, there are an*enormous*number of pairs of Strings that have the same hashCode()!The chances that any two Strings will have the same hashCode() values is quite small. The chances that, out of a collection of Strings, two of them will have the same hashCode() are rather large! This surprising statistical result is often called the Birthday_paradox. Did you know if you get 23 people in a room, the chances are 50-50 that two people among them share the same birthday?

It is sorta covered in the JavaRanch Style Guide. |