Java 获取两个TreeSet的并集和交集
TreeSet 是一个在Java中实现 Set 接口的类。在一个树集中,元素按照排序顺序存储,它内部使用一个叫做二叉搜索树的平衡树来实现排序。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() − 这个方法用于清除TressSet中的所有元素。
treeSetObject.clear(); // removes all elements from set
contains() - 该方法用于检查传递给参数的元素是否存在于TrssSet中。它返回一个布尔值。如果元素存在,则返回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 conatians elements or not
addAll() − 该方法用于将一个集合中的元素添加到另一个集合中。它接受一个集合类型的参数,将该参数中的元素添加到调用该方法的集合中。
colletion_1.addAll(collection_2);
retainAll() −此方法用于保留两个集合中都存在的元素,即将调用此方法的集合与作为参数传递的集合进行比较。它返回一个布尔值。如果调用该方法的集合被修改,则返回true,否则返回false。
boolean result = collection_1.retainAll(collection_2);
现在,我们详细讨论如何实现用于查找两个TreeSet的并集和交集的Java代码的代码实现。
方法1:使用addAll()和retainAll()
在这个方法中,我们将使用Java提供的addAll()和retainAll()方法来找到两个TreeSet的并集和交集。
步骤
- 通过使用Arrays.asList()将数组元素转换为列表,初始化两个TreeSet,即s1和s2。
-
将s1复制为union TreeSet,并使用addAll()方法添加s2中的所有元素并打印它。
-
将s1复制为intersection TreeSet,并使用retainAll()方法找到s1和s2之间的共同元素并打印它。
示例
在这个例子中,我们创建两个树对象s1和s2,并用值初始化它们,然后我们在s1对象上创建一个名为“union”的TreeSet的新对象,并使用addAll()方法添加s2中的元素,从而获得集合s1和s2的所有元素,即两个TreeSet s1和s2的并集。我们在s1对象上创建一个名为“intersection”的TreeSet的新对象,并使用retainAll()方法从s1和s2的TreeSet中获取所有共同元素。
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(),初始化两个TreeSets s1和s2。
-
创建一个空的TreeSet union,并通过遍历s1和s2的元素并使用add()将它们添加到union中。
-
创建一个空的TreeSet intersection,并通过遍历s1和使用contains()找到s1中存在于s2的元素,如果元素存在,则使用add()将其添加到intersection中。
-
打印union和intersection两个TreeSets。
示例
在这个示例中,我们创建两个tree对象s1和s2,并将它们初始化为具有值,然后我们创建一个名为’union’的TreeSet对象,并使用for-each循环将来自s1和s2两个集合的所有元素添加到该集合中。然后,我们创建一个名为’intersection’的新treeset,使用foreach循环遍历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找到两个TreeSet的并集和交集的不同方法。