hashmap的浅识

HashMap基于Map接口实现,元素以键值对的方式存储,并且允许使用null 建和null 值, 因为key不允许重复,因此只能有一个键为null,另外HashMap不能保证放入元素的顺序,它是无序的,和放入的顺序并不能相同。HashMap是线程不安全的。
在1.7时为数组+链表的结构存储,1.8则为数组+链表+红黑树(链表节点多时转成红黑树)。提高效率的情况下也保证了大部分情况下的线程安全,但是在循环次数过多的情况下依然有线程安全的问题。
在

当向容器添加元素的时候,会判断当前容器的元素个数,如果大于等于阈值—即当前数组的长度乘以加载因子的值的时候,就要自动扩容。
为了高效数组的长度为2的次幂(减少key之间的碰撞,而加快查询的效率),初始值一般为16,而因子为0.75。
扩容就是根据重新计算的数组长度新建一个数组,把旧数据重新hash计算以后放进去(1.8的话就不需要重新计算了,只需要看看原来的hash值新增的那个bit是1还是0就好了,是0的话索引没变,是1的话索引变成“原索引+oldCap”)。然后把老数据释放掉。所以这个过程很消耗性能,所以一般建议初始化的时候很大的话就提前把大小预估值写进去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值