出自:https://blog.csdn.net/weixin_42504145/article/details/84309397?depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1&utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1
疑问:
static int indexFor(int h, int length) { //根据hash值和数组长度算出索引值
return h & (length-1); //这里不能随便算取,用hash&(length-1)是有原因的,这样可以确保算出来的索引是在数组大小范围内,不会超出
}
// 相当于h%(length-1),出自:
https://blog.csdn.net/lele52080/article/details/78451369
https://www.iteye.com/blog/kujo-2225022
1、一个数组下标处,存放了多个键值对,除了hash值冲突之外,是否存在hash值没有冲突,但是定位到了同一个数组下标处的情况?
既然如果是取余,那么30%30,60%30的余数都是0,没看懂博客和源码,大概可能有这样的情况,这不影响hashMap的存放和获取数据。
hash算法的目的是为了提高查询的效率,出现不同的k值存放到同一个下标处,影响了效率,可能HashMap不会出现这种情况
2、h & (length-1);计算数组下标的这个方法的h不是k值的hash值,而是根据该hash值二次计算得到的h值。为什么要二次计算
网友评论