HashMap、Hashtable、ConcurrentHashMap三者间的异同
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
上一篇: html5启动原生APP总结
推荐阅读
-
HashTable、ConcurrentHashMap、TreeMap、HashMap关于键值的区别
-
HashMap、Hashtable、ConcurrentHashMap三者间的异同
-
HashMap、Hashtable、ConcurrentHashMap三者间的异同
-
Java之HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap简单的区别
-
HashMap和HashTable的异同点
-
HashMap、Hashtable、ConcurrentHashMap三者间的异同
-
HashTable、ConcurrentHashMap、TreeMap、HashMap关于键值的区别
-
HashMap、Hashtable、ConcurrentHashMap三者间的异同
-
HashMap、HashTable和ConcurrentHashMap的区别
-
HashMap,HashTable,ConcurrentHashMap的区别