微信公众号: 爱问CTO
专业编程问答社区
www.askcto.comJDK7中,根据Object类型的key计算出其在数组中的下标位置,HashMap的数据结构是数组+链表。由2个方法hash(Object key)和indexFor(int h,int length)来实现。
hash :该方法主要是将Object转换成一个整型。
indexFor :该方法主要是将hash生成的整型转换成链表数组中的下标。
static int indexFor(int h, int length) { return h & (length-1); }
indexFor方法其实主要是将hashcode换成链表数组中的下标。h表示元素的hashcode值,length就是HashMap的容量。h & (length-1)其实就是h对length进行取模,之所以换成位运算,是出于效率问题考虑。使用位运算代替了取模运算。之所以可以做等价代替,前提是要求HashMap的容量一定要是2^n