1. HashSet概述:
HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。
2. HashSet的实现:
对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成, HashSet的源代码如下:
- public class HashSet<E>
-
extends AbstractSet<E>
-
implements Set<E>, Cloneable, java.io.Serializable
- {
-
static final long serialVersionUID = -5024744406713321676L;
-
-
-
private transient HashMap<E,Object> map;
-
-
-
private static final Object PRESENT = new Object();
-
-
-
-
public HashSet() {
-
map = new HashMap<E,Object>();
- }
-
-
-
-
public HashSet(Collection<? extends E> c) {
-
map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16));
- addAll(c);
- }
-
-
-
-
public HashSet(int initialCapacity, float loadFactor) {
-
map = new HashMap<E,Object>(initialCapacity, loadFactor);
- }
-
-
-
-
public HashSet(int initialCapacity) {
-
map = new HashMap<E,Object>(initialCapacity);
- }
-
-
-
-
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
-
map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
- }
-
-
-
-
public Iterator<E> iterator() {
-
return map.keySet().iterator();
- }
-
-
-
-
public int size() {
-
return map.size();
- }
-
-
-
-
public boolean isEmpty() {
-
return map.isEmpty();
- }
-
-
-
-
public boolean contains(Object o) {
-
return map.containsKey(o);
- }
-
-
-
-
public boolean add(E e) {
-
return map.put(e, PRESENT)==null;
- }
-
-
-
-
public boolean remove(Object o) {
-
return map.remove(o)==PRESENT;
- }
-
-
-
-
public void clear() {
- map.clear();
- }
-
-
-
-
public Object clone() {
-
try {
-
HashSet<E> newSet = (HashSet<E>) super.clone();
- newSet.map = (HashMap<E, Object>) map.clone();
-
return newSet;
-
} catch (CloneNotSupportedException e) {
-
throw new InternalError();
- }
- }
- }
分享到:
相关推荐
HashSet实现原理分析 HashSet是Java集合框架中的一种Set实现,HashSet实现了Set接口,提供了无序、不可重复的集合操作。通过源码分析, HashSet的实现原理可以分为以下几个方面: 1. HashSet的构造函数:HashSet的...
对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如下代码:
Java HashSet的实现原理 HashSet是Java集合框架中的一种set实现,它的实现原理主要基于HashMap。下面我们将详细介绍HashSet的实现原理。 首先,HashSet是Set的一个实现,所以它保证了其中没有重复的元素。在...
HashSet作为Java集合框架中一个重要的非同步集合实现,它在JDK 7.0中的底层实现原理是基于HashMap来存储和操作数据的。下面就详细介绍HashSet的实现原理。 首先,HashSet是Set接口的一个实现类,它用于存储唯一性的...
虽然C++标准库中没有直接提供HashSet类,但我们可以利用其他容器,如`std::unordered_set`来实现类似的功能。不过,在这个场景中,我们将探讨如何使用`std::vector`来模拟HashSet的行为。 `std::vector`是C++标准库...
与HashSet的区别在于,HashSet是基于HashMap实现的集合类,用于存储唯一对象。HashSet中的元素没有顺序,添加元素时,HashSet会将元素转化为键放入HashMap中。因此,HashSet的插入和查找速度与HashMap相当,但由于...
### HashSet去重原理详解 #### 一、概述 在Java编程语言中,`HashSet`是一种常用的集合类,属于`java.util`包的一部分。它不允许集合中有重复的元素,并且不保证集合中元素的顺序。`HashSet`之所以能够实现去重...
在Java语言中,HashSet类是集合框架的重要组成部分,属于Set接口的一个实现。它基于哈希表的原理来存储不重复的元素,其核心在于利用哈希算法快速定位元素存储位置,从而提高数据存取的效率。本篇将详细介绍Java语言...
#### HashSet实现原理 - 基于`HashMap`实现,使用键值对中的键来存储数据,值始终为`PRESENT`。 - 通过散列算法计算元素的哈希码,然后根据哈希码找到存储位置。 #### HashSet如何检查重复 - 通过元素的`equals()`...
关于“HashSet保证数据不重复的原理”,这涉及到HashSet内部的实现。HashSet基于HashMap实现,每个元素都是HashMap的一个键。在添加元素时,HashSet会调用对象的hashCode()方法生成哈希码,然后根据哈希码快速定位...
24. **HashSet实现原理**: HashSet基于HashMap实现,每个元素作为HashMap的一个键,键的值是固定的。 【多线程】 25. **并行与并发**: 并行指多任务同时执行,而并发是交替执行,看起来同时进行。 26. **线程...
在Java编程语言中,集合类是用于存储一组...在黑马程序员_毕向东_Java基础视频教程中,你可能会更详细地学习到关于HashSet的实现原理和实战技巧。通过观看相关视频和实践操作,可以加深对HashSet的理解,提升编程能力。
在Java编程语言中,集合框架是处理数据的重要组成部分,其中`...同时,源码阅读也是提升技能的好方法,通过查看`HashSet`和`TreeSet`的源码,可以更深入地了解它们的工作原理,这有助于优化代码并解决可能出现的问题。
在Java编程中,HashSet是一个非常重要的集合类,它继承自AbstractSet并实现了Set接口。HashSet不包含重复元素,也不保持...通过理解HashSet的工作原理和其提供的方法,能够更好地优化我们的代码,提高程序的执行效率。
HashSet 和 TreeSet 是 Java 中两种常用的 Set 集合实现,它们都继承自 Set 接口,但实现方式和特性上存在显著差异。 首先,HashSet 是基于哈希表(HashMap 实例)来存储元素的,因此它提供了快速的插入、删除和...