在 Java 中查找集合交点
![在 Java 中查找集合交点](/img/Java/feature-image---java-set-intersection.webp)
术语 Set
是 java.util
包中的一个接口。集合是存储无序列表的集合接口,不允许存储重复的实体。在数学上,set 接口具有三个属性。
- Set 中的元素不为空。
- Set 中没有两个元素可以相等。
- Set 不保留插入顺序。
在 Java 中使用集合插入和查找集合交集
你可以看到下面的程序,该程序演示了 Java 中的 Set 插入和查找两个集合之间的交集。
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SetIntersection {
public static void main(String[] args) {
Set<Integer> s1 = new HashSet<>();
s1.add(2);
s1.add(7);
s1.add(1);
System.out.println("Set1: " + s1);
List list = Arrays.asList(1, 7, 6, 8);
Set<Integer> s2 = new HashSet<>(list);
System.out.println("Set2: " + s2);
Set<Integer> intersection = new HashSet<>(s1);
intersection.retainAll(s2);
System.out.println("Intersection: " + intersection);
}
}
在上面的代码中,一个集合被声明为该过程的第一步。new HashSet
创建 HashSet
类的一个新实例,并将形成的引用分配给 Set
实例。HashSet
的默认容量是 16
,负载因子是 0.75
。HashSet
类与 Set
接口兼容,因为 HashSet
在内部实现了 Set 接口。
变量 s1
使用 add
方法进行初始化。该函数将定义类型的对象添加到 Set 实例中,考虑到该对象非空且不重复。该函数根据是否插入值返回 boolean
。如果指定元素的类与 Set 实例的类不相似,则该函数将引发 ClassCastException
。如果元素为空值,则抛出 NullPointerException
,如果元素的某些属性禁止将其添加到 Set 集合中,则抛出 IllegalArgumentException
。
创建集合的另一种方法是使用传递给 HashSet
构造函数参数的 list
实例。使用 Arrays
类的 asList
方法使用定义的值初始化列表。列表的实例作为 HashSet
构造函数中的参数传递。Set 集合不保留元素的存储顺序。
Set 的另一个实例使用 s1
实例作为构造函数参数进行实例化。现在,这个 intersection
引用调用另一个方法,即 retainAll
函数。该函数仅保留调用实例和被调用实例时存在的元素。当在 retain
操作中更改 Set 时,该方法返回布尔值 true
。如果它不支持对集合的操作,它会抛出一个 UnsupportedOperationException
。如果集合类型不兼容,则抛出 ClassCastException
,如果 Set 包含空元素,则抛出 NullPointerException
。
上述集合之间的交集的输出如下。
输出:
Set1: [1, 2, 7]
Set2: [1, 6, 7, 8]
Intersection: [1, 7]
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn