JDK1.7和1.8中HashMap与ConcurrentHashMap总结比较

谈到HashMap和ConcurrentHashMap,必然会联想到一些其他集合结构,比如HashTable,Vector等,先理一下他们的区别吧。其实HashTable和Vector已经被废弃了,HashTable和Vector以及ConcurrentHashMap都是线程安全的同步结构,区别是HashTable和Vector是采用synchronized关键字对整个集合对象加锁,效率低下。而ConcurrentHashMap则是采用分段加锁的方式细化了锁的颗粒度,由于高效率所以替代了前两者。但是HashMap是线程不安全的,至于为什么线程不安全下文会有详解,先比较一下两个版本中HashMap和ConcurrentHashMap有什么改变。

一.HashMap

1.JDK1.7中

HashMap本质上是一个Entry数组,Entry中即为键值对,Entry数组在table中的位置是这么计算出来的:

int hash = hash(key.hashCode());
int index = indexFor(hash,table.length);

大致是根据key对象的hashcode值,即key对象的内存地址值,通过hash算法得到一个hash值,这里很清晰的可以看出hashcode值和hash值是两个东西两个概念不要混淆。得到hash值后,再结合数组table的长度计算出数组下标,这里贴出两个算法内容,即hash算法hash()以及位置算法indexFor()。

static final hash(Object key){
    int h;
    return (key == nul
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值