当前位置: 移动技术网 > IT编程>开发语言>Java > HashMap、Hashtable、ConcurrentHashMap三者间的异同

HashMap、Hashtable、ConcurrentHashMap三者间的异同

2020年07月29日  | 移动技术网IT编程  | 我要评论

HashMap

基于Hash表实现的一个Map结构(k-v键值对)
1、jdk1.2提供的,线程不安全的
2、初始化的数组长度是16,是2的幂次方
3、jdk8之后,如果链表的长度大于8,这个单向链表就会转换为红黑树
如果链表长度小于6位,就会从红黑树转换链表
4、数组扩容时,扩容的大小是原有数组长度的的2倍。
5、HashMap的键可以是null,但是只能有一个

Hashtable

1、jdk1.0提供的,线程安全的,
2、初始化的数组长度是11
3、Hashtable的键不能为空
4、数组扩容时,扩容的大小是原有数组长度的的2倍 + 1。

ConcurrentHashMap

jdk1.5提供的包中的类
也是线程安全的,bucket(桶),对每一个桶加锁,也就是意味着
ConcurrentHashMap虽然是线程安全的,但是效率默认就是Hashtable 16倍

HashMap 和 Hashtable 区别

1、HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
2、HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
3、HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
4、Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
5、Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

ConcurrentHashMap 和 Hashtable 区别

ConcurrentHashMap和Hashtable主要区别就是围绕着锁的粒度以及如何锁。如图
在这里插入图片描述
简单来说,ConcurrentHashMap 锁的是整个数组,而Hashtable锁的是每个桶

本文地址:https://blog.csdn.net/weixin_46479720/article/details/107642430

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网