中易网

hashmap的最大容量是多少,在多少的时候会导致查询响应过慢

答案:2  悬赏:70  
解决时间 2021-02-19 18:53
hashmap的最大容量是多少,在多少的时候会导致查询响应过慢
最佳答案
原则上,hashmap的插入和搜索,复杂度都是1,是非常快速的跟你的容量大小通常是没有直接关系的但是这是理想的情况。
这里说的理想,是在你所存储的对象的hashcode这个方法写的非常有效的情况下。根据hash的原理,存放一个对象是根据他的hashcode来计算的,如果没有哈希冲突,那么他的存储效率是最高,最完美的。
为什么哈希冲突会使得效率下降呢?
具体来分析,假设一个对象O1,他的hashcode算出来是1,另一个对象是O2,hashcode算起来也是1. 先放入O1对象,这时候速度很快,根据hashcode计算出来这个对象应该在哪个位置存放,然后直接放进去。但是到了放O2的时候,根据hashcode计算的地址存放,发现之前已经有O1了,那么显然是不能放的,因此就要采取些措施,比如,再计算一次,然后分配存放的地址(如果冲突,将继续,知道解决),一种最恶劣的情况下,很多很多的对象都存在hash冲突,那么重要就变得存储越来越慢。但是这个不是hashmap的责任,而是你的对象的hashcode方法没有定义好,使得冲突频繁
另外,哈希表为了避免这种冲突,会有一点优化。简单的说,原本可以放100个数据的空间,当放到80个的时候,根据经验,接下去冲突的可能性会更加高,就好比一个靶子上80%都是箭的时候你再射一箭出去,射中箭的可能性很大。因此就自动增加空间来减小冲突可能性。
80/100 = 0.8这个0.8就是负载因子。
java中的hashmap的负载因子是0.75说了写理论。说这个的原因是想解释一下你的疑问“10000条的时候在搜索的时候很快,那么在多少条的时候可能导致效率下降呢”。这个答案是肯定的,就是存储的量跟存储效率没有直接的关系。
这页是hash表这个数据结构的优势所在
如果你觉得效率出现问题的时候,应该去关注一下你的存储对象的hashcode方法写的是否有问题
如果想更完美的解决效率问题,还可以手动指定hashmap的负载因子(用HashMap(int factor)这个构造方法),负载因子越低,冲突可能越小。但是牺牲的空间会相应增加

如果还是不能很好理解,可以先参看hash这个数据结构的特点,和JDK中HashMap的源代码,以及注释

学好java,数据结构是很重要的,理解原理的使用,跟生搬硬套的使用,不可同年而语
所以,去面试淘宝,腾讯,化为这种公司不会问你struts怎么用,只会问你struts怎么写。如同不会问你hashmap怎么用,而会问你hashmap的设计理念,和实现原理

希望对你有所帮助
追问:嗯,首先谢谢您的回答,不过我还是有点不明白。我已经在hashmap中insert了200万条记录,当然存储我们在此不考虑时间问题,我现在想知道我每次在这200万条记录中lookup,我需要上百次的lookup此时,经过vs性能分析定位到了lookup相对很耗时,这个是我lookup造成的么,跟存储的记录数的多少没关系么,或者有什么好的解决方案么,谢谢了
全部回答
很大吧,现在的NOSQL不就是这种原理吗,专门用来处理大数据的。
追问:知道啊,不过这个很大大概有的限度啊,比如多少的时候可能会导致它查询效率上降低呢
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
福聚楼酒店地址有知道的么?有点事想过去
插排三个头上哪个是地线
DNF浙江那的区人最多啊
瑞通广告装饰公司地址在什么地方,想过去办事
在墙上掏洞借邻居家的光来读书 叫什么成语来
怎么才能看见我老婆和所有人的聊天记录
十八岁女生适合的眼膜,眼霜,性价比要高~
zd30发动机
尉氏合益村镇银行能绑定微信吗?
投诉上海的公交浦江10路打什么电话?听说近期
婺城区沙畈乡山脚村社区卫生服务站我想知道这
(x-1)·x=42用开平方法记算
为什么猫、猪等动物能一胎生几仔?
手机屏幕锁屏还需要流量吗,那是怎么回事啊
华鸿·阳光世家在什么地方啊,我要过去处理事
推荐资讯
苏axl176是什么车
椰汁桃胶银耳糖水的做法步骤图,怎么做好吃
华盛二手车展厅地址有知道的么?有点事想过去
易家我想知道这个在什么地方
达格阔坦地址在什么地方,想过去办事
胡竹栋在什么地方啊,我要过去处理事情
合肥之心城电影院看电影给停车券吗?
联想哪款笔记本四千多可以360度旋转?
丽江山泉送水站在哪里啊,我有事要去这个地方
丸烧匠章鱼烧在什么地方啊,我要过去处理事情
为什么蜜蜂只产蜂儿,不产蜜
我在上海要了买辆二手车怎么能过成山西的户
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?