学新通技术网

java 中的 HashMap的初始容量为什么是16(2的幂)和Hashtable的初始容量为什么是11(素数)

it1352 18 1
java 中的 HashMap的初始容量为什么是16(2的幂)和Hashtable的初始容量为什么是11(素数)

前言

本文介绍了为什么HashMap的初始容量是16(2的幂)和Hashtable的初始容量是11(素数)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

遇到的问题

当您的 hashCode 为负数时,是否使存储桶的索引为正数?

问题答案

对于HashMap,存储Map的条目的数组中的索引是这样计算的(其中h 由 key 的 hashCode 计算得出):

static int indexFor(int h, int length) {
    return h & (length-1);
}

其中 length 是数组的长度.

这仅在 length 是 2 的幂时有效.如果 length 不是 2 的幂,则必须将此代码更改为效率较低的 返回 h % 长度.

本文出至:学新通技术网

标签: