`

HashSet<E> ConcurrentHashMap和HashMap

 
阅读更多
类 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 用作键或值。

分享到:
评论

相关推荐

    Generic-Collections:C#通用集合的Java实现

    2. `HashMap&lt;K, V&gt;`:等同于C#的`Dictionary&lt;TKey, TValue&gt;`,用于存储键值对。 3. `LinkedList&lt;E&gt;`:实现了`List&lt;E&gt;`接口,提供链表功能。 4. `Deque&lt;E&gt;`:双端队列,支持在两端进行插入和删除操作,可以作为栈或...

    Java软件开发实战 Java基础与案例开发详解 12-5 集合类的同步问题 共8页.pdf

    这是因为Java标准库中大多数集合类默认不是线程安全的,如`HashSet`、`ArrayList`、`LinkedList`和`HashMap`等。 #### 解决方案 针对集合类的同步问题,有多种解决策略: 1. **使用`synchronized`同步块** - **...

    java集合使用实例

    例如,`HashMap&lt;String, Integer&gt; map = new HashMap&lt;&gt;(); map.put("One", 1); map.put("Two", 2);`,可以快速地通过键来访问或修改对应的值。 4. **TreeMap**:TreeMap同样用于存储键值对,但它内部使用红黑树,...

    学士后Java集合框架和泛型课后习题答案

    例如,ArrayList&lt;E&gt;中的E就是一个类型参数,代表某种具体的对象类型。泛型可以限制集合中元素的类型,防止不兼容类型的数据存入,提高编译时的类型检查。 5. **泛型通配符**:?通配符用于表示任意类型。例如,`List...

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    - **存储null键和值**:`HashMap`允许一个`null`键和多个`null`值。 - **元素无序**:插入顺序不被保留。 - **性能**:对于大多数操作(如`get`和`put`),平均时间复杂度为O(1)。 #### 2. LinkedHashMap `...

    HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别.docx

    因此,HashSet的插入和查找速度与HashMap相当,但由于HashSet不需要存储值,所以它的空间效率略高于HashMap。 在使用HashMap时,需要注意的是,如果自定义的键类没有重写equals()和hashCode()方法,可能会导致哈希...

    java开发集合例子

    Map&lt;Character, String&gt; map = new HashMap&lt;&gt;(); ``` 接着,我们还会学习如何向集合中添加、删除和查找元素。例如,向`List`中添加元素: ```java list.add("Element1"); list.add(1, "InsertedElement"); // 在...

    HashSet详解和使用示例_动力节点Java学院整理

    extends E&gt; c)` 使用给定的集合初始化HashSet,将集合中的所有元素添加到新创建的HashSet中。 - **指定初始容量的构造函数**:`HashSet(int initialCapacity)` 指定HashSet的初始容量,避免频繁扩容。 - **指定初始...

    HashMap 和 HashSet的区别

    HashMap和HashSet是Java集合框架中的两种重要数据结构,它们各自有着独特的特性和用途。下面将详细探讨这两者之间的差异。 HashSet是基于Set接口的实现,它遵循Set接口的基本原则,即不允许存储重复的元素。当你...

    深入arraylist,linkedlist,hashmap,hashset源码(2012/3/18)

    在Java编程语言中,ArrayList、LinkedList、HashMap和HashSet是四个非常重要的集合类,它们分别代表了不同类型的数据结构。这篇文章将深入探讨这些类的源码,以帮助我们更好地理解和运用它们。 首先,ArrayList是一...

    hashmap面试题_hashmap_

    答:在多线程环境下,可以使用ConcurrentHashMap,它是线程安全的HashMap实现。 五、HashMap与HashSet的关系 HashSet基于HashMap实现,每个元素作为HashMap的一个键,值为null。因此,HashSet的操作性能也依赖于...

    如何用Map对象创建Set对象Java开发Java经验技巧

    Map&lt;String, Integer&gt; map = new HashMap&lt;&gt;(); map.put("One", 1); map.put("Two", 2); map.put("Three", 3); Set&lt;String&gt; keySet = map.keySet(); System.out.println(keySet); // 输出:[One, Two, Three] ``` 2...

    java集合(自学整理)

    List&lt;String&gt; list = new ArrayList&lt;&gt;(); list.add("a"); list.add("b"); for (String item : list) { System.out.println(item); } ``` - **适配器模式** (`Adapter Pattern`): `java.util.Arrays#asList()...

    Java中HashSet的解读_.docx

    总的来说,Java中的HashSet是一种高效且灵活的集合类,它依赖于HashMap实现快速的元素查找和操作。然而,需要注意的是,由于其无序性和不保证元素插入顺序的特性,它不适合那些需要保持元素插入顺序或需要线程安全的...

    Java Collections 2001 by John Zukowski

    Map&lt;String, Integer&gt; map = new HashMap&lt;&gt;(); map.put("one", 1); map.put("two", 2); System.out.println(map.get("one")); // 输出: 1 ``` #### 五、结语 通过以上内容可以看出,《Java Collections 2001 ...

    前端面试题 java面试题

    3. **集合框架**:ArrayList、LinkedList、HashMap、HashSet的区别与应用场景,以及并发集合类如ConcurrentHashMap的使用。 4. **多线程**:线程同步、互斥,synchronized关键字, volatile关键字,ThreadLocal,...

    JavaHashSet和HashMap源码剖析编程开发技术

    5. **线程安全性**:HashSet和HashMap都不是线程安全的,如果在多线程环境下使用,需要通过Collections.synchronizedSet()或Collections.synchronizedMap()方法进行同步处理,或者使用ConcurrentHashMap等并发容器。...

    Java Generics and Collections.chm

    2. **实现类**:例如 `ArrayList`、`LinkedList`、`HashSet`、`TreeSet`、`HashMap`、`LinkedHashMap` 等,它们实现了相应的接口,提供具体的数据结构和操作方法。 3. **泛型与集合**:集合框架与泛型相结合,可以...

    Java中HashMap详解(通俗易懂).doc

    Java中的HashMap是一个非常重要的...总结起来,HashMap和HashSet是Java集合框架的重要组成部分,它们利用哈希技术提供了高效的数据存储和检索。了解并熟练掌握HashMap的工作原理对于优化Java应用程序的性能至关重要。

    11.集合框架001-Collection接口4-5

    8. **线程安全与并发**:Java集合框架中,有的类(如Vector、ConcurrentHashMap)是线程安全的,可以在多线程环境中直接使用,而其他类(如ArrayList、HashMap)则不是线程安全的,需要在多线程环境下通过同步机制...

Global site tag (gtag.js) - Google Analytics