`

ConcurrentMap和HashMap的区别

    博客分类:
  • java
 
阅读更多

类 HASHSET<E>

所有已实现的接口:Serializable, Cloneable, Iterable<E>, Collection<E>, Set<E>


此类实现 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<K,V>

所有已实现的接口:Serializable, Cloneable, Map<K,V>

基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。




类 CONCURRENTHASHMAP<K,V>

所有已实现的接口:

Serializable, ConcurrentMap<K,V>, Map<K,V>



支持获取的完全并发和更新的所期望可调整并发的哈希表。此类遵守与 Hashtable 相同的功能规范,并且包括对应于 Hashtable 的每个方法的方法版本。不过,尽管所有操作都是线程安全的,但获取操作不 必锁定,并且不 支持以某种防止所有访问的方式锁定整个表。此类可以通过程序完全与 Hashtable 进行互操作,这取决于其线程安全,而与其同步细节无关。



此类与 Hashtable 相似,但与 HashMap 不同,它不 允许将 null 用作键或值。

分享到:
评论

相关推荐

    Java里多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)

    比较Java原生的 3种Map的效率。 1. TreeMap 2. HashMap 3. ConcurrentSkipListMap 本测试查找方法使用Map的get方法,循环、离散获取。... SkipListMap的范围查询效率比HashMap和TreeMap效率都要高。

    lmn-concurrent-hashmap:用于并行模型检查的高性能并发哈希表 C 库

    lmn-concurrent-hashmap 用于并行模型检查的高性能并发哈希映射的 C/C++ 库 要求 autoconf 2.69 automake 1.11.3 gcc 4.6.3 g++ 4.6.3 如何构建 $ autoreconf -i $ ./configure $ make 内容 细粒度锁 ChainHash ...

    一文让你彻底理解JavaHashMap和ConcurrentHashMap

    众所周知HashMap底层是基于数组+链表组成的,不过在jdk1.7和1.8中具体实现稍有不同。1.7中的数据结构图:先来看看1.7中的实现。这是HashMap中比较核心的几个成员变量;看看分别是什么意思?初始化桶大小,因为底层是...

    史上最详细详解hashmap、concurrenthashmap

    本文详述Java语言中的hashmap与concurrenthashmap,使用其他语言的朋友可做参考 首先我们先来看一下这几个类原码开头的部分 public class HashMap extends AbstractMap ...public interface ConcurrentMap extends Map

    ConcurrentHashMap集合源码学习笔记

    ConcurrentHashMap继承了AbstractMap,实现了ConcurrentMap,Serializable接口,ConcurrentMap又实现了Map接口。ConcurrentHashMap是基于散列表实现的,存储的是Key/Value对,底层使用数组+链表+红黑树+CAS算法实现...

    阿里面试题:ConcurrentHashMap为什么是线程安全的?

    阿里面试题:ConcurrentHashMap为什么是线程安全的? ConcurrentHashMap,其实是线程安全的...jdk1.7 ConcurrentHashMap是由一个Segment数组和多个HashEntry数组组成 其实就是将HashMap分为多个小HashMap,每个Segme

    Java理论与实践:构建一个更好的HashMap

    本文分析Doug Lea的util.concurrent包中的ConcurrentHashMap的实现。并针对吞吐量进行优化,对于大多数一般用法来说它是经过优化的,这些用法往往会检索一个很可能在map中已经存在的值。ConcurrentHashMap摒弃了单一...

    ffmpeg-20170620-ae6f6d4-win64

    private static ConcurrentMap, ConcurrentMap, Object&gt;&gt; handlerMap = new ConcurrentHashMap, ConcurrentMap, Object&gt;&gt;(20); private static int checkContentType(String path) { String type = path....

    dashmap:为Rust快速燃烧并发HashMap

    dashmap:为Rust快速燃烧并发HashMap

    大厂真题之蚂蚁金服-Java高级.zip

    jdk1.7 到 jdk1.8 Map 发生了什么变化(底层)? 1.8 之后 hashMap 的数据结构发生了变化,从之前的单纯的数组+链表结构变成数组+链 表+红黑树。也就是说在 JVM 存储 hashMap 的 K-V 时仅仅通过 key 来决定每一个 entry...

    java8源码-example:常见的java知识点代码示例

    在此方法出现在HashMap里面之前,JDK给出的解决方案是ConcurrentMap的putIfAbsent()方法。 出现在HashMap里面的这个putIfAbsent()方法与之前的解决方法具有相同的功能, 4.2 特点 1.当value为null的时候,put

    java面试宝典

    66、HashMap和Hashtable的区别 17 67、说出ArrayList,Vector, LinkedList的存储性能和特性 17 68、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 17 69、文件读写的...

    JAVA面试题最全集

    简述synchronized和java.util.concurrent.locks.Lock的异同 ? 34.EJB规范规定EJB中禁止的操作有哪些? 35.java除了8种基本类型外,在虚拟机里还有哪一种,有什么作用? 36.除了使用new关键字创建对象意外,试列举...

    java7hashmap源码-to-be-architect:成为Java架构师,你应该学习这些

    java7 hashmap源码 to-be-architect to be a Java ...Map:ConcurrentHashMap、HashMap、HashTable 并发List Set:CopyOnWriteArrayList、CopyOnWriteArraySet、 ArrayList、 LinkedList Concurrent

    sesvc.exe 阿萨德

    和 1.7 大体上都差不多,还是有几个重要的区别: TREEIFY_THRESHOLD 用于判断是否需要将链表转换为红黑树的阈值。 HashEntry 修改为 Node。 Node 的核心组成其实也是和 1.7 中的 HashEntry 一样,存放的都是 key ...

    千方百计笔试题大全

    66、HashMap和Hashtable的区别 17 67、说出ArrayList,Vector, LinkedList的存储性能和特性 17 68、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 17 69、文件读写的...

    【面试系列】并发容器之ConcurrentHashMap

    看你简历里写了 HashMap,那你说说它存在什么缺点? 线程不安全 迭代时无法修改值 那你有用过线程安全的 Map 吗? 有,回答在哪用过。 没有,不过我了解过。 那你说说它们的实现。 Hashtable Hashtable 本身比较低效...

    java面试宝典2012版.pdf

    60、HashMap和Hashtable的区别 61、List 和 Map 区别? 62、List, Set, Map是否继承自Collection接口? 63、List、Map、Set三个接口,存取元素时,各有什么特点? 64、说出ArrayList,Vector, LinkedList的存储性能...

    java基础题 很全面

    9. HashMap和Hashtable的区别。 8 10. final, finally, finalize的区别。 8 11. sleep() 和 wait() 有什么区别? 8 12. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 8 13. error和...

    Java高并发高性能分布式框架从无到有微服务架构设计.doc

    有Guava Cache: 缓存和ConcurrentMap是非常相像的,但是它们也不完全一样。最根本的区别就是,Con currentMap会持有所有添加的对象,直到被显示的移除。而缓存为了限制其内存的使用 ,通常都会配置成可以自动的将...

Global site tag (gtag.js) - Google Analytics