When the HashMap needs to resize it creates a new array of buckets, these buckets are accessed using hashCode()
(with minor additional manipulation to map int
hashCode to the number of buckets in hashMap).
Power of 2 size of this array allows for some clever mapping of int
hashCode to bucket number - basically using just the lower part of hashCode (masking the higher part) to address the buckets.