HashMap、HashTable、ConcurrentHashMap区别

HashMap和HashTable有何不同?

线程安全:

HashTable 中的方法是同步的,而HashMap中的方法在默认情况下是非同步的。在多线程并发的环境下,可以直接使用HashTable,但是要使用HashMap的话就要自己增加同步处理了。

继承关系: HashTable是基于陈旧的Dictionary类继承来的。 HashMap继承的抽象类AbstractMap实现了Map接口。

允不允许null值: HashTable中,key和value都不允许出现null值,否则会抛出NullPointerException异常。 HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。

默认初始容量和扩容机制: HashTable中的hash数组初始大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。原因参考全网把Map中的hash()分析的最透彻的文章,别无二家。-HollisChuang‘s Blog

哈希值的使用不同 : HashTable直接使用对象的hashCode。 HashMap重新计算hash值。

遍历方式的内部实现上不同 : Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。 HashMap 实现 Iterator,支持fast-fail,Hashtable的 Iterator 遍历支持fast-fail,用 Enumeration 不支持 fast-fail

HashMap 和 ConcurrentHashMap 的区别?

ConcurrentHashMap和HashMap的实现方式不一样,虽然都是使用桶数组实现的,但是还是有区别,ConcurrentHashMap对桶数组进行了分段,而HashMap并没有。

ConcurrentHashMap在每一个分段上都用锁进行了保护。HashMap没有锁机制。所以,前者线程安全的,后者不是线程安全的。

PS:以上区别基于jdk1.8以前的版本。

原文地址:https://www.cnblogs.com/lujiahua/p/11408810.html

时间: 2024-10-11 15:50:38

HashMap、HashTable、ConcurrentHashMap区别的相关文章

HashMap Hashtable ConcurrentHashMap 一点区别

HashMap  ConcurrentHashMap Hashtable 工作中经常会用到, HashMap用的最多, ConcurrentHashMap次之,hashTable用的最少. 简单看了下源码,其实原因还是挺明显的.从JDK的发展历程来看,hashTable是1.0就发布的,属于最早的key-value形式的存储, 到了1.2才有hashMap, ConcurrentHashMap是1.5中发布的,它们的实现有很多类同,也有很多细节上的区别.这里主要通过查看源码来比较下它们在写入与读

[Java集合] 彻底搞懂HashMap,HashTable,ConcurrentHashMap之关联.

注: 今天看到的一篇讲hashMap,hashTable,concurrentHashMap很透彻的一篇文章, 感谢原作者的分享. 原文地址: http://blog.csdn.net/zhangerqing/article/details/8193118 Java集合类是个非常重要的知识点,HashMap.HashTable.ConcurrentHashMap等算是集合类中的重点,可谓"重中之重",首先来看个问题,如面试官问你:HashMap和HashTable有什么区别,一个比较简

HashMap HashTable ConcurrentHashMap 简单比较

1. HashMap HashTable ConcurrentHashMap都是java哈希算法的实现,其中HashMap是非线程安全的,HashTable 和ConcurrentHashMap是线程安全的.单线程环境下HashMap更有速度优势. 2. HashTable 的实现方式比较简单粗暴,直接对修改操作进行加锁来控制并发访问. 3. ConcurrentHashMap,通过分段(segment)来提高并发性能,进行修改操作时,只是对相应的段进行加锁,理论上段个数的线程可以并行访问Con

ConcurrentHashMap以及HashMap,HashTable的区别

ConcurrentHashMap与HashMap,和HashTable 的区别? ConcurrentHashMap是一个线程安全的key-value数据结构,而HashMap不是.ConcurrentHashMap的数据结构是 数组 + 数组 + 单向链表.HashMap的数据结构是 数组 + 单向列表 HashTable也是线程安全,HashTable与HashMap的存储结构相同,HashTable不允许null为key值,而HashMap允许ConcurrentHashMap是Hash

HashMap,HashTable,TreeMap区别和用法

开始学HashTable,HashMap和TreeMap的时候比较晕,觉得作用差不多,但是到实际运用的时候又发现有许多差别的.需要大家注意,在实际开发中以需求而定. java为数据结构中的映射定义了一个接口java.util.Map,而HashMap Hashtable和TreeMap就是它的实现类.Map是将键映射到值的对象,一个映射不能包含重复的键:每个键最多只能映射一个一个值. Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快

JDK1.8中的HashMap.HashTable, ConcurrentHashMap有什么区别?

JDK1.8中的HashMap,HashTable,ConcurrentHashMap有什么区别? 答:HashMap是线程不安全的,底层采用数组+链表+红黑树的结构 HashTable是线程安全的,因为使用了Synchronized锁住了整个table,底层采用了数组+链表 ConcurrentHashMap是线程安全的,采用了CAS+同步锁Synchronized对链表头节点进行锁定,底层使用数组+链表+红黑树 HashMap的key和value可以是null,其他两个不行. 原文地址:ht

HashMap\HashTable\ConcurrentHashMap的原理与区别

HashTable: 底层数组+链表,key与value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低. 初始size为11,扩容:newsize = oldsize*2 + 1 计算index的方法:index = (hash & 0x7FFFFFFF)%tab.length HashMap: 底层数组+链表实现,可以存储null键和null值,线程不安全 初始size为16,扩容newsize = oldsize*2,size一定为2的n次幂

hashmap hashtable 的区别

Hashtable 和 HashMap 做为 Map 的基本特性 两者都实现了Map接口,基本特性相同 -          对同一个Key,只会有一个对应的value值存在 -          如何算是同一个Key? 首先,两个key对象的hash值相同,其次,key对象的equals方法返回真 内部数据结构 Hashtable和HashMap的内部数据结构相似 其基本内部数据结构是一个Entry数组 (transient Entry[] table) -          数组元素为实现M

HhashMap HashTable ConcurrentHashMap

hashMap hashTable concurrentHashMap hashMap的效率高于hashTable,hashMap是线程不安全的,并发时hashMap put方法容易引起死循环,导致cpu利用率达到100% 所以高并发下不能使用hashMap,而是用ConcurentHashMap,则不会出现这种情况

hashmap,ConcurrentHashMap与hashtable的区别

1.hashmap与hashtable的区别 1.我们从他们的定义就可以看出他们的不同,HashTable基于Dictionary类,而HashMap是基于AbstractMap.Dictionary是什么?它是任何可将键映射到相应值的类的抽象父类,而AbstractMap是基于Map接口的骨干实现,它以最大限度地减少实现此接口所需的工作. 2.HashMap可以允许存在一个为null的key和任意个为null的value,但是HashTable中的key和value都不允许为null. 3.H