找出两个数组中不相同的元素

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]

  

 

以上是关于找出两个数组中不相同的元素的主要内容,如果未能解决你的问题,请参考以下文章

两个字符串数组A和B,寻找相同元素的方法

Java面试题:在一个递增的数组里面,找出任意两个数的和等于100,编写程序输出这些数对,可以假设数组中不存在重复元素

找出两个数组的相同元素,最优算法?

找出两个数组相同的元素,并且对应的个数一样

找出两个数组中相同的元素,不排序直接两次循环取出

JavaScript找出两个一维数组中相同元素以及它们各自在所在数组中的下标有无return和return fasle区别