HashMap和ConcurrentHashMap的区别,HashMap的底层源码。

来源:互联网 发布:lol显示网络连接异常 编辑:程序博客网 时间:2024/06/05 10:06

HashMap本质是数组加链表,根据key取得hash值,然后计算出数组下标,如果多个key对应到同一个下标,就用链表串起来,新插入的在前面。

ConcurrentHashMap在HashMap的基础上将数据分为多个segment,默认16个,然后每次操作对一个segment加锁,避免多线程锁的几率,提高并发效率。并发访问的时候用。

HashMap源码分析

下面是HashMap类中的一些关键属性:

1
2
3
4
5
transient Entry[] table; // 存储元素的实体数组
transient int size; // 存放元素的个数
int threshold; // 临界值,当实际大小超过临界值时,会进行扩容,threshold = loadFactor * 容量
final float loadFactor; // 加载因子
transient int modCount; // 被修改的次数
如果机器内存足够,并且想要提高查询速度的话可以将加载因子设置小一点;相反如果机器内存紧张,并且对查询速度没有什么要求的话可以将加载因子设置大一点。不过一般我们都不用去设置它,默认加载因子为0.75就好了。
阅读全文
0 0