资讯专栏INFORMATION COLUMN

探寻hashmap

jifei / 604人阅读

摘要:方法计算出的值,然后去寻找方法如果需要的存放的存储空间大于默认数组大小负载因子的乘积,那么就发生扩容,扩大为原来的两倍问题为什么的容量总是的次方因为中有一个方法是这样可以减少碰撞概率。例子与不会发生碰撞会发生碰撞,这是一会我数学概率问题。

Hashmap源码

1、 构造器:

  a)获得默认数组大小:1>>4 :16

  b) 获得负载因子:0.75:衡量hashmap的空间使用程度

                    i.过大:使用空间更加充分,但是查找效率变低,即时间复杂度变大

                   ii.过小:hashmap数据过于稀疏,造成空间浪费,即空间复杂度变大

  c)创建数组

2、 Put()方法:使用key的hash算法,计算出可key的存储的数组位置,确定key的位置后相应的value也会确定,如果数组位置已经有数值存在,则以第一个值为链头以链表形式存储。

3、 Get()方法:计算出key的hashcode值,然后去寻找

4、 Resize()方法:如果需要的存放的存储空间大于默认数组大小*负载因子的乘积,那么就发生扩容,扩大为原来的两倍

5、 问题:

  a)为什么hashmap的容量总是2的次方

                    i.因为hashmap中有一个方法是h&table.length-1,这样可以减少碰撞概率。

                   ii.例子: 8&14  9&14 与  8&15  9&15 15不会发生碰撞 14会发生碰撞,这是一会我数学概率问题。

  b) 可以的话建议使用hashmap的clear方法循环使用hashmap

                    i.应为hashmap是强引用类型,原有不适使用的hashmap不会被jvm回收,可能造成内存泄露
高并发的hashmap

1、 情况(1.7):内部链表遭到破坏,发生链表成环,造成死循环,cpu飙升

2、 解决:1.8 引入两个指针声明 确保顺序

确保hashmap线程安全

1、 方法

  a)使用collections.synchronizedmap方法

  b) 使用concurrenthashmap并发集合类代替

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72782.html

相关文章

  • 常用加密算法探寻

    摘要:在开发过程中,常常用到各种加密方法和算法,本文总结了几种常用加密方法的原理。非对称加密原理非对称加密算法需要两个密钥公开密钥和私有密钥。 在开发过程中,常常用到各种加密方法和算法,本文总结了几种常用加密方法的原理。 对称加密 showImg(https://segmentfault.com/img/bVbacxw?w=1128&h=468); 原理: 加密和解密数据使用同一个密钥,适...

    Yu_Huang 评论0 收藏0
  • 探寻 JavaScript 精度问题以及解决方案

    摘要:推导为何等于在中所有数值都以标准的双精度浮点数进行存储的。先来了解下标准下的双精度浮点数。精度位总共是,因为用科学计数法表示,所以首位固定的就没有占用空间。验证完成的最大安全数是如何来的根据双精度浮点数的构成,精度位数是。 阅读完本文可以了解到 0.1 + 0.2 为什么等于 0.30000000000000004 以及 JavaScript 中最大安全数是如何来的。 十进制小数转为二...

    YanceyOfficial 评论0 收藏0
  • 50行代码搞定无限滑动幻灯片

    摘要:对,滑动式幻灯片的关键就在于隐藏。在条件里我们添加一个事件相当于滑动后的回掉,依赖这个事件在幻灯片滑动执行完毕后立即执行里面的闪回操作。通过添加事件监听滑动是否结束从而迅速闪回,达到貌似无限滑动的效果。 slider轮播组件,在各类网站上出现及其频繁,有渐隐式的,滑动式的等等一系列。栗子在这: 但我当初学习写轮播时却被各种入门教程搞得焦头烂额。不是代码太复杂,就是封装太严重,初学者很难...

    yimo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<