欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

HashMap、Hashtable、ConcurrentHashMap三者间的异同

程序员文章站 2022-06-19 11:49:03
Hashtable 和 HashMap 的区别与联系1.两者都继承与map接口,所以两者的遍历方式大同小异2.Hashtable底层使用synchronize来进行修饰的,所以它是线程安全的,同步的,又由于它是线程安全的,所以它的效率较低,它的初始化的数组长度是11,它数组扩容的大小是原有数组长度的2倍+13.HashMap底层没用synchronize来进行修饰的,所以它是线程不安全的,不同步的,又由于它是不线程安全的,所以它的效率较搞,它的初始化长度为16是2的幂次方,它数组扩容的大小是原先数组长...

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主要区别就是围绕着锁的粒度以及如何锁。如图
HashMap、Hashtable、ConcurrentHashMap三者间的异同
简单来说,ConcurrentHashMap 锁的是整个数组,而Hashtable锁的是每个桶

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