ZetCode

Java HashSet

上次修改时间:2024 年 3 月 6 日

在本文中,我们将展示如何使用 Java HashSet 集合。

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

HashSet 实现了 Set 接口。 Set 是一个没有重复项的集合。 此接口模拟数学集合的抽象。

示例一

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

Main.java
import java.util.HashSet;
import java.util.Set;

void main() {

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

    brands.add("Wilson");
    brands.add("Nike");
    brands.add("Volvo");
    brands.add("IBM");
    brands.add("IBM");

    int nOfElements = brands.size();

    System.out.format("The set contains %d elements%n", nOfElements);
    System.out.println(brands);
}

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

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

即使我们尝试将一个品牌添加两次,一个集合也只包含一个 IBM 品牌。

int nOfElements = brands.size();

我们确定 brands 集合的大小。

System.out.println(brands);

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

$ java Main.java
The set contains 4 elements
[Nike, Volvo, IBM, Wilson]

示例二

在以下示例中,我们展示 addremoveremoveAllisEmpty 方法。

Main.java
import java.util.HashSet;
import java.util.Set;

void main() {

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

    brands.add("Wilson");
    brands.add("Nike");
    brands.add("Volvo");
    brands.add("Kia");
    brands.add("Lenovo");

    Set<String> brands2 = new HashSet<>();

    brands2.add("Wilson");
    brands2.add("Nike");
    brands2.add("Volvo");

    System.out.println(brands);

    brands.remove("Kia");
    brands.remove("Lenovo");

    System.out.println(brands);

    brands.removeAll(brands2);

    System.out.println(brands);

    if (brands.isEmpty()) {

        System.out.println("The brands set is empty");
    }
}

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

System.out.println(brands);

初始 HashSet 将打印到控制台。

brands.remove("Kia");
brands.remove("Lenovo");

System.out.println(brands);

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

brands.removeAll(brands2);

System.out.println(brands);

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

if (brands.isEmpty()) {

    System.out.println("The brands set is empty");
}

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

$ java Main.java
[Nike, Lenovo, Kia, Volvo, Wilson]
[Nike, Volvo, Wilson]
[]
The brands set is empty

示例三

在以下示例中,我们使用 addcontainsclearisEmpty 方法。

Main.java
import java.util.HashSet;
import java.util.Set;

void main() {

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

    brands.add("Wilson");
    brands.add("Nike");
    brands.add("Volvo");
    brands.add("Kia");
    brands.add("Lenovo");

    if (brands.contains("Wilson")) {

        System.out.println("The set contains the Wilson element");
    } else {

        System.out.println("The set does not contain the Wilson element");
    }

    if (brands.contains("Apple")) {

        System.out.println("The set contains the Apple element");
    } else {

        System.out.println("The set does not contain the Apple element");
    }

    brands.clear();

    if (brands.isEmpty()) {

        System.out.println("The set does not contain any elements.");
    }
}

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

if (brands.contains("Wilson")) {

    System.out.println("The set contains the Wilson element");
} else {

    System.out.println("The set does not contain the Wilson element");
}

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

$ java Main.java
The set contains the Wilson element
The set does not contain the Apple element
The set does not contain any elements.

HashSet 迭代

我们可以使用 forEach 方法来迭代 HashSet 的元素。 forEach 方法为集合的每个元素执行给定的操作,直到所有元素都已处理完毕或该操作抛出异常。

Main.java
import java.util.HashSet;
import java.util.Set;

void main() {

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

    brands.add("Wilson");
    brands.add("Nike");
    brands.add("Volvo");
    brands.add("Kia");
    brands.add("Lenovo");

    brands.forEach(e -> System.out.println(e));
}

使用 forEach 方法,我们迭代集合并将其元素打印到控制台。

迭代器是一个用于迭代集合的对象。 迭代器通过 iterator 检索。

Main.java
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

void main() {

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

    brands.add("Wilson");
    brands.add("Nike");
    brands.add("Volvo");
    brands.add("Kia");
    brands.add("Lenovo");

    Iterator<String> it = brands.iterator();

    while (it.hasNext()) {

        String element = it.next();
        System.out.println(element);
    }
}

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

可以使用增强的 for 循环来迭代 HashSet

Main.java
import java.util.HashSet;
import java.util.Set;

void main() {

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

    brands.add("Wilson");
    brands.add("Nike");
    brands.add("Volvo");
    brands.add("Kia");
    brands.add("Lenovo");

    for (String brand: brands) {

        System.out.println(brand);
    }
}

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

for (String brand: brands) {

    System.out.println(brand);
}

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

来源

Java HashSet - 语言参考

在本文中,我们介绍了 Java HashSet 集合。

作者

我叫 Jan Bodnar,是一名充满激情的程序员,拥有丰富的编程经验。 我自 2007 年以来一直在撰写编程文章。 迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有Java教程