转载

HashMap中如何根据key算出元素的存储位置

HashMap中如何根据key算出元素的存储位置

微信公众号: 爱问CTO

专业编程问答社区

www.askcto.com

JDK7中,根据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

原文  https://segmentfault.com/a/1190000021359191
正文到此结束
Loading...