深入理解hashmap,hashtable,currenthashmap

自己看了很多篇文章,总结了一下

首先hashmap是线程不安全的,hashtable是线程安全的,为什么出现了currenthashmap呢,肯定是因为hashtable性能跟不上被,类似的还有vector和arrayList
jdk1.2的时候 有了hashmap 后来道格立java.util.concurrent包的创建者解决了线程不安全的这个问题
建议新手看一下源码 currenthashmap extends Abstractmap implements concurrentMap 并且序列化 然后设置了一个序列化的UID,这个大家可以看一下我前面的文章,序列化和反序列化自己写的容易理解
currenthashmap默认将hash表分为16个桶,也就是16个segment,然后对这些桶使用了锁分段技术,所谓锁分段技术就是一个进程对其中一个桶进行操作时,其他的进程可以对其他的桶进行操作,put get remove这些都对单个桶进行操作,当一个进程刚进入时就进行枷锁lock操作,这点就跟hashtable区分开,hashtable是对整张表进行操作,一次只能一个进程,而currenthashmap一次可以16个进程,并发效率显而易见。
但是有些方法,size或者containvalue就必须对整张表进行操作

hashmap初始大小是16,key 和value都可以是null,扩容时二倍长度+1,扩容因子百分之75,

讲几个名词

          哈希冲突:key的哈希值按数组大小取模,这个值跟其他的相同时

         负载因子:为了减少哈希冲突,当达到这个值的时候进行扩容

         空间换时间:减小负载因子的值,加大初始容量,这样做查询边快,但是内存开销大
         转自我自己的博客[深入理解hashmap,hashtable,currenthashmap](https://www.cnblogs.com/luckbear/p/14697409.html)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值