公司一C程序员, 实习生那种, 遇到一个问题, 找出两个数组中不同的元素,像我请教, 然后自己试用用java编码写了一下, 小编刚开始思路和大家应该是差不多的, 搞两个for循环, 然后挨个拿每个元素进行对比最后输出打印出两个数组中不同的元素, 但最后写下来发现并不是那么回事;
于是,上网查了下资料,发现大部分都在说下面这种方法:
但是小编经过查看分析思路, 发现上面这种方法存在缺陷, 大家能很清楚的看到, 上面代码只是循环遍历了 t2数组(具体看上面第四行代码), 然后使用list1挨个对比看看 t2数组的每个元素是否包含存在在第一个数组中, 如果不包含, 就保存到最后新的结果集中, 像上面这种 t1 数组元素个数比 t2数组元素个数少的情形当然没有问题, 但是如果t1 也就是说第一个数组元素 t1 个数比 t2 第二个数组元素个数多的情况下, 找出不同的元素就会出现问题, 大家看我具体操作, 直接上代码看运行结果:
通过上面的结果大家很清楚的看出, 不是我们最终想要的结果, 第一个数组 array1中的 12, -23, 0, 88都没有输出, 所以很明显网上这个方法有问题,存在缺陷, 只能适用于 第一个数组元素个数比第二个数组元素个数少的情形(很明显一点都不通用不是我们想要的); 在原方法的基础上, 经过改良, 得到以下代码, 最终运行结果也一并输出:
package cn.seatech.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by Administrator on 2021/3/25.
*/
public class ArrayTest {
public static <T> List<T> compare(T[] t1, T[] t2) {
List<T> list1 = Arrays.asList(t1);
List<T> list2 = Arrays.asList(t2);
List<T> list3 = new ArrayList<>();//用来保存最后结果的集合
for (T t : t2) {
if (!list1.contains(t)) {
list3.add(t);
}
}
for (T t:t1) {
if (!list2.contains(t)) {
list3.add(t);
}
}
return list3;
}
public static void main(String[] arg){
Integer[] array1 = {1, 2, 3};
Integer[] array2 = {1, 2, 3, 4,44};
List<Integer> list = compare(array1,array2);
for (Integer num : list) {
System.out.print(num+" ");
}
}
}
运行结果如下: 第一个数组元素个数比第二个数组少的情形
关键地方代码有注释哈, 大家应该能够很清楚的看明白, 上面是 array1第一个数组比 第二个数组 array2元素个数少的情形, 为了验证我上面方法的通用性, 现在在 array1数组中添加几个元素, 让第一个数组 array1元素个数超过第二个数组 array2, 具体操作大家看代码和运行结果: 第一个数组元素个数比第二个数组多的情形
核心代码:
package cn.seatech.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by Administrator on 2021/3/25.
*/
public class ArrayTest {
public static <T> List<T> compare(T[] t1, T[] t2) {
List<T> list1 = Arrays.asList(t1);
List<T> list2 = Arrays.asList(t2);
List<T> list3 = new ArrayList<>();//用来保存最后结果的集合
for (T t : t2) {
if (!list1.contains(t)) {
list3.add(t);
}
}
for (T t:t1) {
if (!list2.contains(t)) {
list3.add(t);
}
}
return list3;
}
public static void main(String[] arg){
Integer[] array1 = {1, 2, 3,12,-23,0,88};
Integer[] array2 = {1, 2, 3, 4,44};
List<Integer> list = compare(array1,array2);
System.out.println("----两个数组找出不同的元素-----");
for (Integer num : list) {
System.out.print(num+" ");
}
}
}
运行结果:
很清楚的看到最后输出的结果完全没毛病, 不管是第一个数组元素的个数比第二个数组元素个数多还是少, 小编上面这种方法统统都适用, 并且也能很清楚的看到, 上面两个数组中元素的顺序都可以是任意的, 这也就达到了一个方法的通用性, 也不难看出来, 上面小编也确实把compare(T[] t1, T[] t2)单独提取关键核心代码封装成了一个方法, 至于大家可能考虑那要是第一个数组 array1元素个数和 array2个数相同的情形呢, 小编也就不再上代码示例和运行结果图了, 思路清晰搞懂了, 不难看出来两数组元素个数相同, 上面方法一样适用, 哈哈, 就是这么自信;
关于连载文章, Java中找出两个数组中不同的元素, 第二种好的办法请移步到小编另一篇博客查阅:https://hellowordjava.blog.csdn.net/article/details/115210489(点我跳转)
你知道的越多, 你越不知道的就越多(学无止境)! 今天就先到这, 下期我们不见不散, 欢迎大家一键三连, 点赞, 收藏, 评论, 看完如果觉得还不错,对你有启发, 还请点个关注再走; 感谢感谢