Given the following key:
int key = Guid.NewGuid().GetHashCode();
Is this key unique as the uniqueness of Guid?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
The pigeonhole principle says no. A GUID has 16 bytes of information* – 128 bits. An
inthas only 32 bits of information.There are 2128 possible GUIDs, and 232 possible hash codes – so you can’t possibly have a different hash code for each GUID.
There’s more than that though –
GetHashCode()is never meant to represent uniqueness. If it can, then that’s great – but it doesn’t have to, even when there are enoughintvalues available to do so.It would be entirely valid for
int.GetHashCode()to return (say) the value divided by two… so -1, 0 and 1 would all get a hash code of 0; 3 and 4 would get a hash code of 2 etc. It wouldn’t be good (and it would be slower than just returning the value) – but it would be a valid implementation. It would satisfy all the constraints ofGetHashCode– namely that if you call it on two equal values, it will return the same hash code.In fact, returning a constant for all values is a valid implementation – although a pretty useless one, in that it renders the normally-fast lookup of a hash table into an O(N) operation.
* – To clarify due to comments, the .NET GUID will allow these 128 bits to be set arbitrarily as far as I’m aware; randomly generated GUIDs follow a stricter pattern so there aren’t 2128 different values which would be randomly generated. Still more than 232 though.