前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么hashMap的容量是2的幂次

为什么hashMap的容量是2的幂次

作者头像
秋白
发布2018-05-24 13:26:56
1.4K0
发布2018-05-24 13:26:56
举报
文章被收录于专栏:java小白java小白java小白

HashMap通过哈希算法得出哈希值之后,将键值对放入哪个索引的方法

    static int indexFor(int h, int length) {
        // assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2";
        return h & (length-1);
    }

假设 HashMap的容量为16转化成二进制为10000,length-1得出的二进制为01111 哈希值为1111

这里写图片描述
这里写图片描述

可以得出索引的位置为15


假设 HashMap的容量为15转化成二进制为1111,length-1得出的二进制为1110 哈希值为1111和1110

这里写图片描述
这里写图片描述

那么两个索引的位置都是14,就会造成分布不均匀了,增加了碰撞的几率,减慢了查询的效率,造成空间的浪费。 总结:

  1. 因为2的幂-1都是11111结尾的,所以碰撞几率小。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年03月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档