Set in Java

2025年3月27日 | 阅读 9 分钟

在 Java 中,Set 是一个接口,属于 java.util 包。Set 接口扩展了 Collection 接口。不能包含重复元素的无序集合或列表被称为 **Collection 接口**。Set 接口用于创建数学上的集合。Set 接口使用 Collection 接口的方法来避免插入相同的元素。SortedSetNavigableSet 是扩展 Set 实现的两个接口。

Set in Java

在上图中,NavigableSetSortedSet 都是接口。NavigableSet 扩展了 SortedSet,因此它不会保留插入顺序,而是以排序的方式存储数据。

在 Java 中,Set 接口是 java.util 包的一部分,并由 HashSet、TreeSet 和 LinkedHashSet 等多个类实现。Sets 广泛用于元素唯一性是优先考虑的任务,例如存储唯一标识符、过滤数据中的重复条目或实现数学集合运算。

SetExample1.java

输出

Set in Java

注意:在本节中,我们使用文件名编译程序,并使用类名运行程序。因为文件名和类名是不同的。

Set 操作

在 Set 上,我们可以执行所有基本的数学运算,如交集、并集和差集。

假设我们有两个集合,即 set1 = [22, 45, 33, 66, 55, 34, 77] 和 set2 = [33, 2, 83, 45, 3, 12, 55]。我们可以对 Set 执行以下操作:

  • 交集:交集运算返回同时存在于两个集合中的所有元素。set1 和 set2 的交集将是 [33, 45, 55]。
  • 并集:并集运算将 set1 和 set2 的所有元素返回到单个集合中,该集合可以是 set1 或 set2。set1 和 set2 的并集将是 [2, 3, 12, 22, 33, 34, 45, 55, 66, 77, 83]。
  • 差集:差集运算从集合中删除存在于另一个集合中的值。set1 和 set2 的差集将是 [66, 34, 22, 77]。

在 set 中,addAll() 方法用于执行并集,retainAll() 方法用于执行交集,removeAll() 方法用于执行差集。让我们举个例子来理解这些方法如何用于执行交集、并集和差集运算。

SetExample2.java

输出

Set in Java

描述

在上面的代码中,我们首先创建两个整型数组 A 和 B。之后,我们创建两个整型集合 set1 和 set2。我们将两个数组转换为列表,并将数组 A 的元素添加到 set1,将数组 B 的元素添加到 set2。

为了执行并集,我们创建一个新的集合 union_data,其中包含 set1 的相同元素。然后,我们调用 set 的 addAll() 方法,并将 set2 作为参数传递给它。此方法将把所有未包含在 union_data 中的元素添加到其中,并给出两个集合的并集。

为了执行交集,我们创建一个新的集合 intersection_data,其中包含 set1 的相同元素。然后,我们调用 set 的 retainAll() 方法,并将 set2 作为参数传递给它。此方法将从 intersection_data 中获取所有存在于 set2 的元素,并将其存储在 intersection_data 中。现在,intersection_data 包含两个集合的交集值。

为了执行差集,我们创建一个新的集合 difference_data,其中包含 set1 的相同元素。然后,我们调用 set 的 removeAll() 方法,并将 set2 作为参数传递给它。此方法将从 difference_data 中删除所有存在于 set2 的元素,并给出两个集合的差集。

Set 方法

Set 接口中有几种方法可用于对我们的集合执行特定操作。这些方法如下:

1) Set.add() 方法

add() 方法将新值插入到集合中。该方法根据插入元素是否存在返回 true 或 false。如果元素已存在于集合中,则返回 false;如果元素不存在于集合中,则返回 true。

语法

SetExample3.java

输出

Set in Java

2) Set.addAll() 方法

addAll() 方法将指定集合的所有元素追加到集合中。

语法

SetExample4.java

输出

Set in Java

3) Set.clear() 方法

该方法删除集合中的所有元素。它不会删除集合的引用。它只删除集合中的元素。

语法

SetExample5.java

输出

Set in Java

4) Set.contains() 方法

contains() 方法用于检查元素是否存在于集合中。根据元素是否存在,其返回值是 true 或 false。

语法

SetExample6.java

输出

Set in Java

5) Set.containsAll() 方法

该方法用于检查集合的所有元素是否存在于现有集合中。如果集合的所有元素都存在于集合中,则返回 true;即使缺少一个元素,也返回 false。

语法

SetExample7.java

输出

Set in Java

6) Set.hashCode() 方法

该方法用于派生集合当前实例的哈希码值。它返回一个整数类型的哈希码值。

语法

SetExample8.java

输出

Set in Java

7) Set.isEmpty() 方法

isEmpty() 方法用于识别集合是否为空。如果集合为空,则返回 true;如果集合不为空,则返回 false。

语法

SetExample9.java

输出

Set in Java

8) Set.iterator() 方法

iterator() 方法用于查找集合的迭代器。迭代器用于逐个获取元素。

语法

SetExample10.java

输出

Set in Java

9) Set.remove() 方法

该方法用于从 Set 中删除指定的元素。其返回值取决于元素是否存在。如果元素存在于集合中,则返回 true;如果元素不存在于集合中,则返回 false。

语法

SetExample11.java

输出

Set in Java

11) Set.removeAll() 方法

该方法从指定集合中删除现有集合的所有元素。

语法

SetExample12.java

输出

Set in Java

11) Set.retainAll() 方法

该方法保留给定集合中指定的集合的所有元素。

语法

SetExample13.java

输出

Set in Java

12) Set.size() 方法

该方法返回集合的大小。

语法

SetExample14.java

输出

Set in Java

13) Set.removeAll() 方法

该方法用于创建一个包含集合相同元素的数组。

语法

SetExample15.java

输出

Set in Java

Set 的关键特性

  • 唯一性:Set 不允许重复元素。如果向一个已包含某个元素的 Set 中添加该元素,add 操作将返回 false,表示该元素未被添加。
  • 元素顺序不保证:与 List 不同,Set 不保证元素的顺序。元素的存储顺序可能因使用的具体 Set 实现而异。
  • 性能:Set 在 add、remove 和 contains 等操作上提供高效的性能。性能特征可能因实现类而异。

常见的 Set 实现

  • HashSet:HashSet 是 Java 中最常用的 Set 实现之一。它使用哈希表进行存储,并为 add、remove 和 contains 等基本操作提供常量时间性能。但是,它不保证元素的顺序。
  • TreeSet:TreeSet 是 Set 接口的一种实现,它使用红黑树进行存储。它以排序顺序维护元素,使其适用于需要以排序方式访问元素的场景。
  • LinkedHashSet:LinkedHashSet 是一种混合数据结构,它结合了哈希表和链表。它维护一个可预测的迭代顺序,即元素插入 Set 的顺序。