原文:http://zetcode.com/java/hashset/

Java HashSet教程显示了如何使用 Java HashSet集合。

Java HashSet

HashSet是一个不包含重复元素的集合。 此类为基本操作(添加,删除,包含和调整大小)提供恒定的时间性能。 HashSet不提供元素的排序。 HashSet没有用于检索元素的get()方法。

HashSet实现Set接口。 Set是一个没有重复的集合。 该接口对数学集合抽象进行建模。

Java HashSet构造器

  • HashSet() - 构造一个默认的空集。
  • HashSet(int initialCapacity) - 使用给定的初始容量构造一个新的空集。 当元素添加到HashSet时,容量会自动增长。
  • HashSet(int initialCapacity, float loadFactor) - 使用给定的初始容量和负载因子构造一个新的空集。
  • HashSet(Collection<? extends E> c) - 构造一个新集合,其中包含指定集合的元素。

E是元素的类型。

Java HashSet方法

下表提供了几种HashSet方法。

修饰符和类型 方法 描述
void clear() 从集合中删除所有元素。
Object clone() 返回HashSet实例的浅表副本:元素本身未克隆。
boolean contains(Object o) 集合为空,则返回true
boolean add(E e) 如果指定的元素尚不存在,则将其添加到该集合中。
boolean remove(Object o) 从该集合中删除指定的元素(如果存在)。
boolean removeAll(Collection<?> c) 从该集合中删除指定集合中包含的所有元素。
Iterator<E> iterator() 返回此集合中元素的迭代器。
int size() 返回此集合中的元素数。

在本教程中,我们将使用其中的几种方法。

Java HashSet创建

new关键字创建HashSet

  1. Set<String> brands = new HashSet<>();

尖括号之间的元素类型。 由于类型推断,因此不必在声明的右侧提供类型。

Java HashSet添加元素

add()方法用于将元素添加到集合中。

  1. brands.add("Pepsi");

参数是要添加到集合中的元素。

Java HashSet确定容量

size()方法返回集合中的元素数。

  1. int nOfElements = brands.size();

Java HashSet示例 I

下面的示例创建一个HashSet,确定其大小,并将所有元素打印到控制台。

HashSetSize.java

  1. package com.zetcode;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. public class HashSetSize {
  5. public static void main(String[] args) {
  6. Set<String> brands = new HashSet<>();
  7. brands.add("Wilson");
  8. brands.add("Nike");
  9. brands.add("Volvo");
  10. brands.add("IBM");
  11. brands.add("IBM");
  12. int nOfElements = brands.size();
  13. System.out.format("The set contains %d elements%n", nOfElements);
  14. System.out.println(brands);
  15. }
  16. }

在代码示例中,我们创建了一个品牌HashSet。 每个品牌都必须是唯一的。 例如,不能有两个 IBM 公司注册。

  1. brands.add("IBM");
  2. brands.add("IBM");

甚至以为我们尝试两次添加一个品牌,但一组仅包含一个 IBM 品牌。

  1. int nOfElements = brands.size();

我们确定brands集的大小。

  1. System.out.println(brands);

所有元素都将打印到控制台。

  1. The set contains 4 elements
  2. [Nike, Volvo, IBM, Wilson]

这是示例的输出。

Java HashSet isEmpty()

isEmpty()方法检查集合中是否包含任何元素。

  1. brands.isEmpty();

参数是要从此集中删除的对象(如果存在)。

Java HashSet删除元素

可以使用remove()removeAll()方法删除HashSet中的元素。

  1. brands.remove("Pepsi");

remove()方法从集中删除指定的元素(如果存在)。

  1. brands.removeAll(collection);

使用removeAll(),可以从HashSet中删除参数集合中包含的所有元素。

Java HashSet示例 II

在下面的示例中,我们介绍add()remove()removeAll()isEmpty()方法。

HashSetRemove.java

  1. package com.zetcode;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. public class HashSetRemove {
  5. public static void main(String[] args) {
  6. Set<String> brands = new HashSet<>();
  7. brands.add("Wilson");
  8. brands.add("Nike");
  9. brands.add("Volvo");
  10. brands.add("Kia");
  11. brands.add("Lenovo");
  12. Set<String> brands2 = new HashSet<>();
  13. brands2.add("Wilson");
  14. brands2.add("Nike");
  15. brands2.add("Volvo");
  16. System.out.println(brands);
  17. brands.remove("Kia");
  18. brands.remove("Lenovo");
  19. System.out.println(brands);
  20. brands.removeAll(brands2);
  21. System.out.println(brands);
  22. if (brands.isEmpty()) {
  23. System.out.println("The brands set is empty");
  24. }
  25. }
  26. }

该示例构建品牌的HashSet并从中删除元素。

  1. System.out.println(brands);

初始HashSet被打印到控制台。

  1. brands.remove("Kia");
  2. brands.remove("Lenovo");
  3. System.out.println(brands);

我们用remove()删除两个元素,并将brands的内容打印到控制台。

  1. brands.removeAll(brands2);
  2. System.out.println(brands);

最后,我们从第一组中删除第二组中包含的所有元素。

  1. if (brands.isEmpty()) {
  2. System.out.println("The brands set is empty");
  3. }

如果brands设置为空,我们将向终端打印一条消息。

  1. [Nike, Lenovo, Kia, Volvo, Wilson]
  2. [Nike, Volvo, Wilson]
  3. []
  4. The brands set is empty

This is the output of the example.

Java HashSet clear()

clear()方法从集合中删除所有元素。

  1. brands.clear();

该方法没有参数。

Java HashSet contains()

如果集合包含指定的元素,则contains()方法返回true

  1. brands.contains("Volvo");

参数是要测试其是否存在于该集合中的元素。

Java HashSet示例 III

在下面的示例中,我们使用add()contains()clear()isEmpty()方法。

HashSetContains.java

  1. package com.zetcode;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. public class HashSetContains {
  5. public static void main(String[] args) {
  6. Set<String> brands = new HashSet<>();
  7. brands.add("Wilson");
  8. brands.add("Nike");
  9. brands.add("Volvo");
  10. brands.add("Kia");
  11. brands.add("Lenovo");
  12. if (brands.contains("Wilson")) {
  13. System.out.println("The set contains the Wilson element");
  14. } else {
  15. System.out.println("The set does not contain the Wilson element");
  16. }
  17. if (brands.contains("Apple")) {
  18. System.out.println("The set contains the Apple element");
  19. } else {
  20. System.out.println("The set does not contain the Apple element");
  21. }
  22. brands.clear();
  23. if (brands.isEmpty()) {
  24. System.out.println("The set does not contain any elements.");
  25. }
  26. }
  27. }

在示例中,我们检查集合中是否存在两个元素。

  1. if (brands.contains("Wilson")) {
  2. System.out.println("The set contains the Wilson element");
  3. } else {
  4. System.out.println("The set does not contain the Wilson element");
  5. }

我们检查集合中是否存在"Wilson"品牌,并相应地打印一条消息。

  1. The set contains the Wilson element
  2. The set does not contain the Apple element
  3. The set does not contain any elements.

This is the output of the example.

Java HashSet迭代与forEach()

我们使用 Java8 forEach()方法来迭代HashSet的元素。 forEach()方法对集合中的每个元素执行给定的操作,直到所有元素都已处理或该操作引发异常。

HashSetForEach.java

  1. package com.zetcode;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. public class HashSetForEach {
  5. public static void main(String[] args) {
  6. Set<String> brands = new HashSet<>();
  7. brands.add("Wilson");
  8. brands.add("Nike");
  9. brands.add("Volvo");
  10. brands.add("Kia");
  11. brands.add("Lenovo");
  12. brands.forEach(e -> System.out.println(e));
  13. }
  14. }

使用forEach()方法,我们遍历该集合并将其元素打印到控制台。

使用迭代器的 Java HashSet迭代

迭代器是用于迭代集合的对象。 使用iterator()检索迭代器。

HashSetForEach.java

  1. package com.zetcode;
  2. import java.util.HashSet;
  3. import java.util.Iterator;
  4. import java.util.Set;
  5. public class HashSetIterator {
  6. public static void main(String[] args) {
  7. Set<String> brands = new HashSet<>();
  8. brands.add("Wilson");
  9. brands.add("Nike");
  10. brands.add("Volvo");
  11. brands.add("Kia");
  12. brands.add("Lenovo");
  13. Iterator<String> it = brands.iterator();
  14. while (it.hasNext()) {
  15. String element = it.next();
  16. System.out.println(element);
  17. }
  18. }
  19. }

该代码示例遍历HashSet的所有元素,并将它们打印到控制台。

Java 使用增强的for循环迭代HashSet

Java 5 中引入的增强的for循环可用于对HashSet进行迭代。

HashSetEnhancedFor.java

  1. package com.zetcode;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. public class HashSetEnhancedFor {
  5. public static void main(String[] args) {
  6. Set<String> brands = new HashSet<>();
  7. brands.add("Wilson");
  8. brands.add("Nike");
  9. brands.add("Volvo");
  10. brands.add("Kia");
  11. brands.add("Lenovo");
  12. for (String brand: brands) {
  13. System.out.println(brand);
  14. }
  15. }
  16. }

在该示例中,我们迭代具有增强的for循环的HashSet

  1. for (String brand: brands) {
  2. System.out.println(brand);
  3. }

在每个for循环中,将一个新元素分配给brand变量。

在本教程中,我们介绍了 Java HashSet集合。 您可能也对相关教程感兴趣:Java HashMap教程Java ArrayList教程Java static关键字Java 中的HashMap迭代Java8 forEach教程用 Java 读取文本文件用 Java 读写 ICO 图像Java 教程用 Java 显示图像