JDK7中的ConcurrentHashMap和JDK7的HashMap的扩容是不太一样的,首先JDK7中也是支持多线程扩容的,原因是,JDK7中的ConcurrentHashMap分段了,每一段叫做Segment对象,每个Segment对象相当于一个HashMap,分段之后,对于ConcurrentHashMap而言,能同时支持多个线程进行操作,前提是这些操作的是不同的Segment,而ConcurrentHashMap中...
ConcurrentHashMap是一个线程安全的key-value数据结构,而HashMap不是。 ConcurrentHashMap的数据结构是 数组 + 数组 + 单向链表。HashMap的数据结构是 数组 + 单向列表 HashTable也是线程安全,HashTable与HashMap的存储结构相同,HashTable不允许null为key值,而HashMap允许 ConcurrentHashMap是HashTable的升级版,线程均安...
总之,HashTable是多线程安全的,不需要人工同步,但性能方面会差一点;而HashMap不能直接用于多线程。而 ConcurrentHashMap的出现正解决上诉问题。它是HashMap的线程安全版本,性能方面也优于HashTable。ConcurrentSkipListMap是TreeMap的线程安全版本
我们知道Hashtable是synchronized的,但是ConcurrentHashMap同步性能更好,因为它仅仅根据同步级别对map的一部分进行上锁。ConcurrentHashMap当然可以代替HashTable,但是HashTable提供更强的线程安全性。看看这篇博客查看Hashtable和ConcurrentHashMap的区别。 我个人很喜欢这个问题,因为这个问题的深度和广度,也不直接的涉及到不同...
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差。 那ConcurrentHashMap呢,它是干嘛的?
在选择使用Hashtable还是HashMap时,需要根据具体的应用场景和需求进行权衡。如果需要一个线程安全且稳定的哈希表实现,可以选择ConcurrentHashMap;如果更关注性能且在单线程环境下工作,可以选择HashMap。同时也要注意它们的使用限制和特性,以便更好地发挥它们的作用。
以及HashMap与HashTable的区别? HashMap 不是线程安全的。 HashMap 做 put 操作时,两个线程同时进入 addEntry 操作,计算出相同的 hash 值,A线程写入头节点之后,B线程也写入头节点,那么A的操作就会被覆盖,造成A的写入操作丢失。 Vector 和 HashTable,concurrentHashMap,copyOnwriteArrayList时线程安全的。
这里的Hashtable容量和HashMap的容量就有区别,Hashtable并不要求容量是2的幂次方,而HashMap要求容量是2的幂次方。负载因子则默认都是0.75。 put方法 put方法是同步的,即线程安全的,这点和HashMap不一样,还有具体的put操作和HashMap也存在很大的差别,Hashtable插入的时候是插入到链表头部,而HashMap是插入到链表尾部...
ConcurrentHashMap: 首先,这个数据结构的并发效率比较高,这与其内部的结构是分不开的。具体我们从JDK1.7开始谈起,1.7中的ConcurrentHashMap的结构如图所示: 这里采用了分段锁的设计,所以相对HashTable更加高效,但是这种设计依旧有个问题,那就是其基本上还是数组加链表的方式,那么我们去查询的时候还是要遍历链表,这样效率...