This question already has an answer here:
In java, hashcode() method, returns integer instead of long. Is there any specific reason?
Well, one good reason is that the hashCode
based data structures (HashSet
, HashMap
) use an array to store the bins, and arrays are limited to int
indices. You will gain nothing by a long
hashCode()
if you must map it to an int
array index.
Using the hashCode is to have N buckets where the hashCode % N determines the bucket of elements, hopefully being 1 (no conflicting hashCodes).
For N, for the hash code, an int is entirely sufficient; indeed one needs to have most variety in the lower bits; having a long without using the higher bits (when N would be a power of 2), would be counter productive.
Speed of course is a requirement too: int being slightly better on the final CPU.
来源:https://stackoverflow.com/questions/49489116/why-does-hashcode-returns-an-integer-and-not-long