HashMap--concurrentHashMap的一些知识搜集

目录

HashMap

ConCurrentHashMap


面试中经常会被问道:

面试官:有了解HashMap吗,讲一下HashMap吧~

我:呃呃呃~是这样的,balabalbala~

 搜集了网上的一些资料,估计也不全,大致也能说明白这个道理,(仅作为面试参考):
这个事情要从JDK的版本更新说起,话说现在,风云跌宕,大家都讲:我们支持的JDK版本最低为1.8~


好,这就是一个目前的分界线了。

先翻历史,再论现在。

HashMap

JDK1.7

这个版本-HashMap的底层使用数组加链表实现。根据key计算出数据下标,如果多个key对应到同一个下标,就用链表串起来,新插入的放在前面。

JDK1.8

这个版本有了一些变化,底层使用数组+链表/红黑树来实现的。链表长度超过8,就转红黑树,红黑树大小小于6就转回链表

key是如何Hash的呢?

// java HashMap 
static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }

不够我说的,太少了,再来点--好的,满足你-

-推荐-唐彤--zhisheng(公众号)--的文章--面试官:HashMap 源码你都不知道还来面试?

tips:除了这些底层结构,加上get --set--这些方法打出来更好--绝对加分项

ConCurrentHashMap

JDK1.7

在Hashmap的基础上,把数据分为了多个segment段,默认16个段,以段来进行加锁操作,提高并发效率。

JDK1.8

取消了,大部分操作不加锁了(红黑树的锁依然存在,如不了解,懂我意思,此处暂不谈论)

不使用Segment分段加锁控制,转为使用Node+CAS+Synchronized来实现,锁的粒度转为HashEntry(首节点)

 

这些看完觉得不够,怎么够面试说的呢~,这样有办法

推荐 厮大 (公众号-朱小厮的博客)的一篇文章-叫做--为什么ConcurrentHashMap的读操作不需要加锁?

 

那你要问HashTable,那这样,遥远的从前 java 5开始有了JUC的包,那是已经转用ConcurrentHashMap而不是HashTable了

好了,给你文章,你自己看吧~

知乎问题: HashMap和Hashtable的区别?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值