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


TreeSet 是一个实现Set接口的类,在Java中。在TreeSet中,元素按排序顺序存储,因为它内部使用称为二叉搜索树的排序平衡树实现。TreeSet中的元素默认按升序存储。并集包含两个集合中的所有元素。交集包含两个集合中都存在的元素。

在本节中,我们将讨论如何使用Java获取两个TreeSet的并集和交集。

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

并集 - 集合的并集包含集合A、集合B或两者中的所有元素。如果一个元素同时存在于两个集合中,那么我们只在结果并集中显示一次。

A={1,2,3,4}
B={3,4,5}
A union B ={1,2,3,4,5}

交集 - 集合的交集包含两个集合中都存在的元素。

A={1,2,3,4}
B={3,4,5}  	
A intersection B={3,4}

现在我们将深入了解Java提供的TreeSet的基本操作以及方法的语法和用法。

TreeSet的基本操作

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

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

treeSetObject.add(element)

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

treeSetObject.remove("b"); // removes "b" from the set

clear() - 此方法用于清除TreeSet中的所有元素。

treeSetObject.clear(); // removes all elements from set

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

boolean val = treeSetObject.contains(‘b’); // checks ‘b’ is present and returns boolean value

isEmpty() - 此方法用于检查TreeSet是否为空。它返回布尔值。如果TreeSet为空,则返回true,否则返回false。

boolean val = treeSetObject.isEmpty(); // checks hashSet contains elements or not  

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

colletion_1.addAll(collection_2);

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

boolean result  = collection_1.retainAll(collection_2);

现在,我们将详细讨论如何实现Java代码以查找两个TreeSets的并集和交集。

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

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

算法

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

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

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

示例

在这个例子中,我们创建了两个树对象s1、s2并用值初始化它们,然后我们在s1对象上创建一个名为“union”的TreeSet新对象,我们使用addAll()方法将s2中存在的元素添加到其中,以获取s1和s2中存在的元素,这也就是两个TreeSets s1和s2的并集。我们在s1对象上创建一个名为“intersection”的TreeSet新对象,我们使用retainAll()方法从s1和s2 TreeSets中获取所有公共元素。

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中以获取两个TreeSets的并集。对于交集,我们遍历两个TreeSets并找到公共元素。

算法

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

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

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

  • 打印并集和交集TreeSets。

示例

在这个例子中,我们创建了两个树对象s1、s2并用值初始化它们,然后我们创建一个名为“union”的TreeSet新对象,并使用for-each循环将两个集合s1和s2的所有元素添加到该集合中。然后我们创建一个名为“intersection”的新TreeSet,并使用for each循环遍历s1,并检查该元素是否在s2中,如果存在,则将其添加到“intersection”TreeSet中。然后我们打印这两个TreeSets。

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查找两个TreeSets的并集和交集的不同方法。

更新于: 2024年6月26日

264 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.