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

  • Post author:
  • Post category:其他


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