Java 程序获取两个 TreeSet 的并集和交集

javaobject oriented programmingprogramming更新于 2024/8/5 18:05:00

TreeSet 是一个在 Java 中实现 Set 接口的类。在树集中,元素按排序顺序存储,因为它在内部使用称为二叉搜索树的排序平衡树实现。默认情况下,TreeSet 中的元素按升序存储。集合的 并集 包含两个集合中的所有元素。集合的 交集 包含两个集合中共同存在的所有元素。在本节中,我们将讨论如何使用 Java 获取两个树集的并集和交集。

什么是集合的并集和交集?

并集 - 集合的并集包含集合 A 或集合 B 或​​两者中的所有元素。如果一个元素在两个集合中都存在,那么我们只会将其显示为结果并集中的唯一出现一次。

A={1,2,3,4}
B={3,4,5}
A 并集 B ={1,2,3,4,5}

交集 − 集合的交集包含两个集合中共同存在的所有元素。

A={1,2,3,4}
B={3,4,5}
A 交集 B={3,4}

现在我们将研究 Java 提供的树集的基本操作以及方法的语法和用法。

TreeSet 的基本操作

在这里,我们将讨论关于我们可以在 TreeSet 上使用的基本操作Java TreeSet 类提供的内置方法。

add() − 此方法有助于将元素添加到 TreeSet。它接受一个参数,基本上是存储在 TreeSet 中的元素类型。

treeSetObject.add(element)

remove() − 此方法有助于从 TreeSet 中删除元素。传递给此方法的元素将从 TreeSet 中删除。

treeSetObject.remove("b"); // 从集合中删除"b"

clear() − 此方法有助于清除 TressSet 中的所有元素。

treeSetObject.clear(); // 从集合中删除所有元素

contains() − 此方法有助于检查作为参数传递的元素是否存在于 TrssSet 中。它返回布尔值。如果元素存在,则返回 true,否则返回 false。

boolean val = treeSetObject.contains('b'); // 检查'b'是否存在并返回布尔值

isEmpty() − 此方法有助于检查 TreeSet 是否为空。它返回布尔值。如果树集为空,则返回 true,否则返回 false。

boolean val = treeSetObject.isEmpty(); // 检查 hashSet 是否包含元素

addAll() − 此方法用于将元素集合添加到调用它的其他集合中。它接受一个集合类型的参数,从该参数中将元素添加到调用它的集合中。

colletion_1.addAll(collection_2);

retainAll() − 此方法用于保留两个集合中存在的元素,即,它将调用此方法的集合与作为参数传递的集合进行比较。它返回一个布尔值。如果调用它的集合被修改,则返回 true,否则返回 false。

boolean result = collection_1.retainAll(collection_2);

现在我们详细讨论如何实现java代码来查找两个TreeSet的并集和交集。

方法1:使用addAll()和retainAll()

在这种方法中,我们将使用java提供的addAll()和retainAll()方法来查找两个treeset的并集和交集。

算法

  • 通过使用Arrays.asList()将数组元素转换为列表,初始化两个TreeSet,即s1,s2。

  • 将s1复制为并集Treeset,并使用addAll()添加s2的所有元素并打印。

  • 将s1复制为交集TreeSet,并使用retainAll()查找s1和s2之间的共同元素并打印它。

示例

在此示例中,我们创建两个树对象 s1、s2 并用值初始化它们,然后我们在 s1 对象上创建一个名为"union"的新 TreeSet 对象,并使用 addAll() 方法添加 s2 中存在的元素以获取 s1 和 s2 两个集合中存在的所有元素,这只不过是两个树集 s1 和 s2 的并集。我们在 s1 对象上创建一个名为"intersection"的新 TreeSet 对象,并使用 retainAll() 方法从 s1 和 s2 树集中获取所有公共元素。

import java.util.*;

public class Main{
   public static void main(String[] args) {
      TreeSet<Integer> s1 = new TreeSet<>(Arrays.asList(2, 8, 7, 3));
      TreeSet<Integer> s2 = new TreeSet<>(Arrays.asList( 5, 2, 7));
      TreeSet<Integer> union = new TreeSet<>(s1);
      union.addAll(s2);
      System.out.println("Union Set : " + union);
      TreeSet<Integer> intersection = new TreeSet<>(s1);
      intersection.retainAll(s2);
      System.out.println("Intersection Set : " + intersection);
   }
}

输出

Union Set : [2, 3, 5, 7, 8]
Intersection Set : [2, 7]

方法 2:使用迭代语句

在此方法中,我们将使用 java 提供的 for-each 循环并迭代两个集合,然后将其添加到另一个 TreeSet 以获取两个 TreeSet 的并集。对于交集,我们循环遍历两个 TreeSet 并找到共同元素。

算法

  • 通过使用 Arrays.asList() 将数组元素转换为列表来初始化两个 TreeSet s1、s2。

  • 创建一个空的 TreeSet 联合并遍历 s1 和 s2 元素,然后使用 add() 将它们添加到联合中。

  • 创建一个空的 TreeSet 交集并遍历 s1,并使用 contains() 查找 s1 中存在的 s2 元素,如果元素存在,则使用 add() 将它们添加到交集 Treeset 中。

  • 打印并集和交集 TreeSet。

示例

在此示例中,我们创建两个树对象 s1、s2 并使用值初始化它们,然后我们创建一个新的TreeSet 的对象名为"union",使用 for-each 循环,我们将来自 s1 和 s2 两个集合的所有元素添加到集合中。然后,我们创建一个名为"intersection"的新树集,并使用 foreach 循环迭代 s1 并检查该元素是否存在于 s2 中,如果存在,我们将它添加到"intersection"树集。然后,我们打印这两个树集。

import java.util.*;

public class Main {
   public static void main(String[] args) {
      TreeSet<Integer> s1 = new TreeSet<>(Arrays.asList(2, 8, 7, 3));
      TreeSet<Integer> s2 = new TreeSet<>(Arrays.asList(5, 2, 7));
      TreeSet<Integer> union = new TreeSet<>();
      for (Integer element : s1) {
         union.add(element);
      }
      for (Integer element : s2) {
         union.add(element);
      }
      TreeSet<Integer> intersection = new TreeSet<>();
      for (Integer element : s1) {
         if (s2.contains(element)) {
            intersection.add(element);
         }
      }
      System.out.println("Union: " + union);
      System.out.println("Intersection: " + intersection);
   }
}

输出

Union: [2, 3, 5, 7, 8]
Intersection: [2, 7]

因此,在本文中,我们学习了使用 Java 查找两个 TreeSet 的并集和交集的不同方法。


相关文章