1.7
源码
相当于只是对k做了个简单的hash,取了一下其hashCode。而HashTable中也没有indexOf方法,取而代之的是这段代码:int index = (hash & 0x7FFFFFFF) % tab.length;。也就是说,HashMap和HashTable对于计算数组下标这件事,采用了两种方法。HashMap采用的是位运算,而HashTable采用的是直接取模。
把hash值和0x7FFFFFFF做一次按位与操作
保证得到的index的第一位为0,也就是为了得到一个正数。因为有符号数第一位0代表正数,1代表负数。
为什么没有选择位运算而是直接取模
hashtable的容量一直都是素数,扩容是2n+1,对于素数,简单的取模,哈希结果会更均匀
1.8
源码
取消了hash方法,但是哈希的操作还是有的。但是hash值少了和hashSeed的异步操作,而是直接使用对象的hashCode值。