一般采用哈希算法的时候,哈希表的长度设为多大?有什么依据?
2012-11-30 10:30
489 查看
hashMap的初始化的长度,
这里使用的策略是循环查出一个大于initialCapacity的2的次方的数,例如 initialCapacity的值是10,那么大于10的数是2的4次方,也就是16
capacity的值被赋予了16,那么实际上table数组的长度是16,之所以采用这样的策略来构建Hash表的长度,是因为2的次方运算对于计算机来说是有相当的效率。
如果数据是10w的话,每条数据50bytes,内存占用也就是5M,并且你更在乎查询速度;
所以
Map map = new HashMap(2^18,0.5);
容量设为2^18=262144,在保证查询复杂度为常数的前提下,负载因子0.5的话, 这个map里面最多可以存贮262144/2个元素,可以满足需求
查询复杂度为常数(O(1)):就是大部分一个桶装一个元素;要达到这个目标,就要保证 容量*负载因子>=元素个数
这里使用的策略是循环查出一个大于initialCapacity的2的次方的数,例如 initialCapacity的值是10,那么大于10的数是2的4次方,也就是16
capacity的值被赋予了16,那么实际上table数组的长度是16,之所以采用这样的策略来构建Hash表的长度,是因为2的次方运算对于计算机来说是有相当的效率。
如果数据是10w的话,每条数据50bytes,内存占用也就是5M,并且你更在乎查询速度;
所以
Map map = new HashMap(2^18,0.5);
容量设为2^18=262144,在保证查询复杂度为常数的前提下,负载因子0.5的话, 这个map里面最多可以存贮262144/2个元素,可以满足需求
查询复杂度为常数(O(1)):就是大部分一个桶装一个元素;要达到这个目标,就要保证 容量*负载因子>=元素个数
相关文章推荐
- 项目分层有什么优缺点? 分层一般采用什么依据?
- 什么时候该采用结对编程?
- 请问APP连接的服务器程序一般采用什么技术方案和框架
- 设计 MySQL 数据表的时候一般都有一列为自增 ID,这样设计原因是什么,有什么好处?
- 继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
- mysqlint类型的长度值mysql在建表的时候int类型后的长度代表什么
- 什么时候该采用结对编程?
- 我面试产品经理的时候,一般都在聊什么
- 美国L1签证面谈的时候一般VO会问到什么问题?
- 数据库索引文件一般采用什么数据结构?
- 什么时候该采用结对编程?
- 什么时候该采用结对编程
- 我们在连接mysql数据库的时候一般都会在url后面添加useUnicode=true&characterEncoding=UTF-8 ,但是问什么要添加呢?
- 请问各路大神,CRM来APP一般采用的什么框架开发
- 继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
- 对称加密算法中,des算法的密钥长度是多少,采用什么进行加密
- 对称加密算法中,des算法的密钥长度是多少,采用什么进行加密
- 像素是什么意思?一个像素有多大? 告诉你像素和分辨率的关系!
- 采用系统提供的加密图形服务计算 MD5 哈希
- 我们什么时候才能实现真正的人工智能?