Hashtable与HashMap另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一...
ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键值对数据。一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap类似,是一种数组和链表结构, 一个Segment里包含一个HashEntry数组,每个HashEntry是一个...
区别对比一(HashMap 和 HashTable 区别): 1、HashMap 是非线程安全的,HashTable 是线程安全的。 2、HashMap 的键和值都允许有 null 值存在,而 HashTable 则不行。 3、因为线程安全的问题,HashMap 效率比 HashTable 的要高。 4、Hashtable 是同步的,而 HashMap 不是。因此,HashMap 更适合于单线程...
HashMap键值允许为空,而ConcurrentHashMap都不允许为空
2、hashmap支持:支持null的key和value值,在hashtable源码中有对null的判断,为null,抛出空指针异常。 3、扩容方式不一样 HashTable默认的初始大小为11,之后每次扩充为原来的2n+1。HashMap默认的初始化大小为16,之后每次扩充为原来的2倍。如果在创建时给定了初始化大小,那么HashTable会直接使用你给定的大小,而HashMa...
HashTable是做了同步,HashMap没有考虑同步。单线程情况下,HashMap的效率较高。在多线程情况下,同步操作能够保证程序执行的正确性,但是HashTable每次同步执行的时候都要锁住整个结构,效率很低。 ConcurrentHashMap 多线程情况下,线程安全,效率比HashTable高。
ConcurrentHashMap 在 HashMap 的基础上对其所存的数据进行了分段,每个分段都有一个锁,当读的时候不受锁的影响,只有在写的时候受锁的限制,缩小了锁的范围,不同段之间不受锁竞争影响,既保证了线程安全,又提升了性能。ConcurrentHashMap 类是 Java 并发包java.util.concurrent中提供的一个线程安全且高效的 Hash...
HashMap是线程不安全的,当出现多线程操作时,会出现安全隐患,我们可能会想到HashTable,是的,这个是线程安全的,但是HashTable用的是方法锁,把整个put方法都上锁了,这就导致了效率很低,如果把put方法比作是一个有很多房间的院子,那么HathTable的锁就相当于是把院子的大门锁上了。而ConcurrentHashMap是用的块锁...