HashMap HashTable和ConcurrentHashMap的区别
发布网友
发布时间:2022-04-02 02:03
我来回答
共2个回答
热心网友
时间:2022-04-02 03:32
区别ConcurrentHashMap线程安全hashMap线程安全
线程安全呢:
ConcurrentHashMap代码看引入段锁概念具体理解Map拆NHashTable根据key.hashCode()决定key放哪HashTable
ConcurrentHashMapMapNSegmentputget候都现根据key.hashCode()算放哪Segment:
热心网友
时间:2022-04-02 04:50
类 HASHSET
所已实现接口:Serializable, Cloneable, Iterable, Collection, Set
类实现 Set 接口由哈希表(实际 HashMap 实例)支持保证 set 迭代顺序;特别保证该顺序搜索恒久变类允许使用 null 元素
类基本操作提供稳定性能些基本操作包括 add、remove、contains size假定哈希函数些元素确布桶 set 进行迭代所需间与 HashSet 实例(元素数量)底层 HashMap 实例(桶数量)容量比例迭代性能重要则要初始容量设置太高(或加载设置太低)
注意实现同步线程同访问哈希 set其至少线程修改该 set必须 保持外部同步通通自封装该 set 象执行同步操作完存象则应该使用 Collections.synchronizedSet 包装 set创建完操作防止该 set 进行意外同步访问:
Set s = Collections.synchronizedSet(new HashSet(...));
类 HASHMAP
所已实现接口:Serializable, Cloneable, Map
基于哈希表 Map 接口实现实现提供所选映射操作并允许使用 null 值 null 键(除非同步允许使用 null 外HashMap 类与 Hashtable 致相同)类保证映射顺序特别保证该顺序恒久变
类 CONCURRENTHASHMAP
所已实现接口:
Serializable, ConcurrentMap, Map
支持获取完全并发更新所期望调整并发哈希表类遵守与 Hashtable 相同功能规范并且包括应于 Hashtable 每版本尽管所操作都线程安全获取操作 必锁定并且 支持某种防止所访问式锁定整表类通程序完全与 Hashtable 进行互操作取决于其线程安全与其同步细节关
HashMap、ConcurrentHashMap、HashTable的区别
Synchronized Map 与 HashTable 差别不大,也是在并发中作类似的操作,两者的唯一区别就是 Synchronized Map 没被遗弃,它可以通过使用 Collections.synchronizedMap() 来包装 Map 作为同步容器使用。另一方面, ConcurrentHashMap 的设计有点特别,表现在多个线程操作上。它不用做外的同步的情况下默认同时允许...
HashMap、HashTable、ConcurrentHashMap的原理与区别
ConcurrentHashMap提供了与Hashtable和SynchronizedMap不同的锁机制。Hashtable中采用的锁机制是一次锁住整个hash表,从而在同一时刻只能由一个线程对其进行操作;而ConcurrentHashMap中则是一次锁住一个桶。Hashtable容器在竞争激烈的并发环境下表现出效率低下的原因是因为所有访问Hashtable的线程都必须竞争同一把...
hashmap和concurrenthashmap的区别是什么?
hashmap和concurrenthashmap的区别如下:HashMap不是线程安全的,而ConcurrentHashMap是线程安全的。ConcurrentHashMap采用锁分段技术,将整个Hash桶进行了分段segment,也就是将这个大的数组分成了几个小的片段segment,而且每个小的片段segment上面都有锁存在。那么在插入元素的时候就需要先找到应该插入到哪一个...
hashmap和concurrenthashmap的区别是什么?
最大的区别就是ConcurrentHashMap是线程安全的,hashMap不是线程安全的。基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此...
JAVA中线程安全的map有哪些?
你看到的Hashtable就是直接在hashmap上加了个锁,concurrenthashmap就是分成多个分段锁。java代码中线程安全级别:绝对线程安全。在任何环境下,调用者都不需要考虑额外的同步措施,都能够保证程序的正确性。这个定义要求很严格,java里面满足这个要求的类比较少,对于实现jsr133规范(java内存模型)的jdk(...
hashmap和hashtable的区别
一、hash数组默认大小不同 1、HashMap:HashMap中 hash数组的默认大小是16,而且一定是2的指数。2、Hashtable:HashTable中hash数组默认大小是11,增加的方式是 old*2+1。二、线程安全不同 HashMap不是线程安全的,HashTable是线程安全。HashMap允许空(null)键值(key),由于非线程安全,效率上可能...
手工加锁的hashmap与concurrenthashmap有什么区别
最大的区别就是ConcurrentHashMap是线程安全的,hashMap不是线程安全的。为什么线程安全呢:ConcurrentHashMap代码中可以看出,它引入了一个“分段锁”的概念,具体可以理解为把一个大的Map拆分成N个小的HashTable,根据key.hashCode()来决定把key放到哪个HashTable中。在ConcurrentHashMap中,就是把Map分成...
hashmap和hashtable的区别
HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。另一个区别是HashMap的迭代器(Iterator)是fail-...
ConcurrentHashMap
ConcurrentHashMap通常只被看做并发效率更高的Map,用来替换其他线程安全的Map容器,比如Hashtable和Collections.synchronizedMap。线程安全的容器,特别是Map,很多情况下一个业务中涉及容器的操作有多个,即复合操作,而在并发执行时,线程安全的容器只能保证自身的数据不被破坏,和数据在多个线程间是可见的,但...
HashMap和Hashtable区别?
两者最主要的区别在于hashtable是线程安全,而hashmap则非线程安全。