java找两数组交集的核心是用hashset存第一个数组元素,遍历第二个数组检查存在性并加入结果集;基本类型需用stream.boxed()转换;若需保持顺序用linkedhashset;若需多重交集则用hashmap计数。

Java 中找出两个数组的交集元素,核心思路是:用一个集合(如 HashSet)存第一个数组的元素,再遍历第二个数组,检查每个元素是否在集合中存在。重复元素只保留一次,符合数学上“交集”的定义。
使用 HashSet 实现(推荐,简洁高效)
适用于整型、字符串等可哈希类型,时间复杂度接近 O(m + n),空间换时间。
- 把第一个数组所有元素加入
HashSet - 遍历第二个数组,对每个元素调用
set.contains() - 若存在,加入结果集合(如
LinkedHashSet保持插入顺序,或普通HashSet去重)
示例代码:
int[] arr1 = {1, 2, 2, 3, 4};
int[] arr2 = {2, 3, 3, 5, 6};
Set<integer> set1 = new HashSet(Arrays.asList(1, 2, 2, 3, 4)); // 注意:Arrays.asList 不支持基本类型数组
// 更稳妥写法:
Set<integer> set1 = Arrays.stream(arr1).boxed().collect(Collectors.toSet());
Set<integer> intersection = new HashSet();
for (int num : arr2) {
if (set1.contains(num)) {
intersection.add(num);
}
}
System.out.println(intersection); // [2, 3]
</integer></integer></integer>
处理基本类型数组的小技巧
Java 的 Arrays.asList() 对 int[] 会把整个数组当作一个元素,不能直接用。必须先转成包装类型流。
- 用
Arrays.stream(arr).boxed()转为Stream<integer></integer> - 再用
.collect(Collectors.toSet())构建集合 - 字符串数组可直接用
Arrays.asList(strArr)
保留原始顺序且去重的交集
如果希望结果按 arr2 中首次出现的顺序排列,用 LinkedHashSet 替代 HashSet 存结果即可:
- 声明
Set<integer> result = new LinkedHashSet();</integer> - 遍历时仍用
set1.contains(num)判断,但用result.add(num) -
LinkedHashSet自动去重并记住添加顺序
如果需要包含重复元素(多重交集)
比如 [1,2,2,3] 和 [2,2,3,3,4] 的交集想是 [2,2,3](每个元素取最小出现次数),就得用计数方式:
- 用
HashMap<integer integer></integer>统计arr1中各元素频次 - 遍历
arr2,对每个元素,若 map 中频次 > 0,就加入结果,并将频次减 1 - 这样能精确模拟“多重集合交集”
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











