# Java 中的`HashSet`类

> 原文： [https://beginnersbook.com/2013/12/hashset-class-in-java-with-example/](https://beginnersbook.com/2013/12/hashset-class-in-java-with-example/)

此类实现`Set`接口，由哈希表（实际上是`HashMap`实例）支持。它不能保证集合的迭代顺序;特别是，它不保证订单会随着时间的推移保持不变。该类允许`null`元素。此类未同步。但是它可以像这样明确地同步：`Set s = Collections.synchronizedSet(new HashSet(...));`

**关于`HashSet`的注意事项：**

1.  `HashSet`不维护任何顺序，元素将以任何随机顺序返回。
2.  `HashSet`不允许重复。如果您尝试在 HashSet 中添加重复元素，则旧值将被覆盖。
3.  `HashSet`允许空值，但是如果插入多个空值，它仍然只返回一个空值。
4.  `HashSet`是非同步的。
5.  这个类返回的迭代器是快速失败的，这意味着如果在创建迭代器之后修改了`HashSet`，迭代器会抛出`ConcurrentModificationException`，除了迭代器自己的`remove`方法之外。

## `HashSet`示例

```java
import java.util.HashSet;
public class HashSetExample {
   public static void main(String args[]) {
      // HashSet declaration
      HashSet<String> hset = 
               new HashSet<String>();

      // Adding elements to the HashSet
      hset.add("Apple");
      hset.add("Mango");
      hset.add("Grapes");
      hset.add("Orange");
      hset.add("Fig");
      //Addition of duplicate elements
      hset.add("Apple");
      hset.add("Mango");
      //Addition of null values
      hset.add(null);
      hset.add(null);

      //Displaying HashSet elements
      System.out.println(hset);
    }
}
```

输出：

```java
[null, Mango, Grapes, Apple, Orange, Fig]
```

如您所见，输出中不存在所有重复值，包括重复的空值。

### `HashSet`教程

*   [删除`HashSet`中的所有元素](https://beginnersbook.com/2014/08/delete-all-the-elements-from-hashset/) 
*   [如何遍历`HashSet`](https://beginnersbook.com/2014/08/how-to-iterate-over-a-sethashset/)
*   [将`HashSet`转换为数组](https://beginnersbook.com/2014/08/converting-a-hashset-to-an-array/)
*   [将`HashSet`转换为`TreeSet`](https://beginnersbook.com/2014/08/how-to-convert-a-hashset-to-a-treeset/)
*   [将`HashSet`转换为`List`/`ArrayList`](https://beginnersbook.com/2014/08/convert-hashset-to-a-list-arraylist/)
*   [`HashSet` vs `HashMap`](https://beginnersbook.com/2014/08/hashset-vs-hashmap-java/)
*   [`HashSet` vs `TreeSet`](https://beginnersbook.com/2014/08/difference-between-hashset-and-treeset/)

### `HashSet`方法：

1.  `boolean add(Element e)`：它将元素 e 添加到列表中。
2.  `void clear()`：它从列表中删除所有元素。
3.  `Object clone()`：此方法返回`HashSet`的浅表副本。
4.  `boolean contains(Object o)`：它检查指定的`Object o`是否存在于列表中。如果找到该对象，则返回`true`，否则返回`false`。
5.  `boolean isEmpty()`：如果`Set`中没有元素，则返回`true`。
6.  `int size()`：它给出了一个`Set`的元素个数。
7.  `boolean(Object o)`：它从`Set`中删除指定的`Object o`。

#### 参考

[`HashSet`文档](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html)