题意:给定两个数组,编写一个函数来计算它们的交集
解决问题之前的一些小知识:
HashSet是实现Set接口,也就是Set的实现类,由哈希表支持的(实现一个HashMap实例)
源码:
private transient HashMap<E,Object> map;
//默认构造器
public HashSet() {
map = new HashMap<>();
}
//将传入的集合添加到HashSet的构造器
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
//明确初始容量和装载因子的构造器
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
//仅明确初始容量的构造器(装载因子默认0.75)
public HashSet(int initialCapacity) {
map = new HashMap<>(initialCapacity);
}
public class Lianggeshuzudejiaji {
public int[] intersection(int[]nums1 ,int[] nums2){
//如果有其中一个数组为空,返回空集合
if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length==0){
return new int[0];
}
//创建集合存放元素
Set<Integer> set = new HashSet<>();
Set<Integer> reSet = new HashSet<>();
//遍历数组1
for (int i: nums1) {
set.add(i);
}
//遍历数组2的过程中判断哈希表中是否存在该数组
for (int i: nums2) {
//如果出现数组1中存在的元素,将重复元素放入新的集合中
if (set.contains(i)){
reSet.add(i);
}
}
//根据数组2判断重复后的集合大小,创建一个新的数组
int [] resArr = new int[reSet.size()];
int index = 0;
//取出集合中的元素,将结果转为数组
for (int i : reSet) {
resArr[index++] = i;
}
return resArr;
}
public static void main(String[] args) {
int [] nums1 = {4,2,2,1};
int [] nums2 = {2,3,4};
Lianggeshuzudejiaji lianggeshuzudejiaji =new Lianggeshuzudejiaji();
int [] res = lianggeshuzudejiaji.intersection(nums1,nums2);
for (int x:res) {
System.out.print(x+" ");
}
}
输出结果:
2 4
这篇博客介绍了如何利用HashSet的特性来高效地计算两个整数数组的交集。首先,博主创建了一个HashSet用于存储第一个数组的所有元素,然后遍历第二个数组,检查每个元素是否在HashSet中存在,如果存在则添加到结果集合中。最后,将结果集合转换为数组返回。这种方法避免了重复元素并提高了查找效率。
1081

被折叠的 条评论
为什么被折叠?



