找出两个数组中不相同的元素
Posted 小小程序员的梦想
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找出两个数组中不相同的元素相关的知识,希望对你有一定的参考价值。
找出两个数组中不相同的元素,网上贴出的代码基本如下:
/** * 找出两个数组中不同的元素 */ public class Test3 { public static Set<Integer> compare(Integer[] a, Integer[] b) { Set<Integer> aSet = new HashSet<>(); Set<Integer> diffSet = new HashSet<>(); aSet.addAll(Arrays.asList(a)); for (Integer i : b) { if(!aSet.contains(i)) { diffSet.add(i); } } return diffSet; } public static void main(String[] args) throws InterruptedException { Integer[] a = {1, 2, 3}; Integer[] b = {1, 2, 3, 4}; System.out.println(compare(a, b)); } }
输出
[4]
猜猜有什么坑??
Integer[] a = {0, 1, 2, 3}; Integer[] b = {1, 2, 3, 4}; 输出 [4]
改进后的代码
/** * 找出两个数组中不同的元素 */ public class Test3 { public static Set<Integer> compare(Integer[] a, Integer[] b) { Set<Integer> aSet = new HashSet<>(); Set<Integer> diffSet = new HashSet<>(); aSet.addAll(Arrays.asList(a)); for (Integer i : b) { if(!aSet.contains(i)) { diffSet.add(i); } } return diffSet; } public static void main(String[] args) throws InterruptedException { Integer[] a = {0, 1, 2, 3}; Integer[] b = {1, 2, 3, 4}; Set<Integer> diffSetA = compare(a, b); Set<Integer> diffSetB = compare(b, a); diffSetA.addAll(diffSetB); System.out.println(diffSetA); } }
输出
[0, 4]
要调用两次方法,有点啰嗦,再次优化如下:
/** * 找出两个数组中不同的元素 */ public class Test4 { public static Set<Integer> compare(Integer[] a, Integer[] b) { // 存储所有元素 Set<Integer> allSet = new HashSet<>(); // 存储相同的元素 Set<Integer> sameSet = new HashSet<>(); allSet.addAll(Arrays.asList(a)); for (Integer i : b) { if(allSet.contains(i)) { sameSet.add(i); } } allSet.addAll(Arrays.asList(b)); // 移除相同的元素 allSet.removeAll(sameSet); return allSet; } public static void main(String[] args) throws InterruptedException { Integer[] a = {0, 1, 2, 3}; Integer[] b = {1, 2, 3, 4}; System.out.println(compare(a, b)); } }
打印
[0, 4]
以上是关于找出两个数组中不相同的元素的主要内容,如果未能解决你的问题,请参考以下文章
Java面试题:在一个递增的数组里面,找出任意两个数的和等于100,编写程序输出这些数对,可以假设数组中不存在重复元素
JavaScript找出两个一维数组中相同元素以及它们各自在所在数组中的下标有无return和return fasle区别