浅谈CurrentHashMap、HashMap、Hashtable

这里着重分析一下currentHashMap和HashMap,顺带分析一下Hashtable

首先HashMap是基于哈希表的map接口的实现类,允许null值null键,不保证顺序。它的底层是通过数组和链表实现的,数组元素存放链表,当我们在hashmap中添加元素的时候,首先根据key的hash算法找到对应的数组下标,在添加值得时候根据equals方法决定链表的位置,如果是新的就直接添加。同样在取出对应node时,先计算对应key的hash值,找到对应的数组下标,根据equals方法从链表上响应的位置,另外在1.8中规定,当链表结点数超过8个以后,链表会转变成红黑树结构以提高查询效率。

Hashtable也是基于哈希表的map接口的实现类,不允许null值null键,底层也是通过数组和链表实现的,但有点不同的是,在底层hashtable将entry当成一个entry对象,存和取的方式和hashmap相同,通过hash算法计算出对应的数组下标,然后equals方法计算出链表上的位置。

接下来讲下CurrentHashMap,它最大的特点就是可以实现并发操作,具体怎么实现的呢?

首先要提到一个锁分离技术,从字面意思解释就是,锁分开在不同的地方,具体分离在什么地方呢?CurrentHashMap使用了多个锁来控制对Hash表的不同段的操作,每一个段就是一个小的hashtable,同时在不同的段进行操作,即实现了所谓的并发。

与hashMap不同的是,CurrentHashMap使用多个子Hash表,也就是段,ConcurrentHashMap允许多个读操作并发进行,读操作并不需要加锁。如果使用传统的技术,如HashMap中的实现,如果允许可以在hash链的中间添加或删除元素,读操作不加锁将得到不一致的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值