EDIT: Turned out I was too lazy to read the source code. Of course, looking at the implementation code, we can find the getNode(Object o) method which is called by get(Object o) method. Inside of it, indeed, the correct bucket is first accessed by calculating the following formula: (n-1) & hash, where n is the length of the internal array. Then for the first node (and each of the rest if there are more) we are comparing the hash of the Object o passed into the method with the hash of the Node/entry. If the hashes are equal, then the equals() method runs to make sure it's the same. If the hashes are not equal, well, then it skips to the next node (if the .next property is not null).