java-两个数组,寻找多出来的元素

时间:2022-07-04 15:58:32
package test;

import java.util.ArrayList;
import java.util.List;

public class Test1 {

public static void main(String[] args) {

int[] array1 = { 1, 34, 65, 89, 143, 38, 20, 183 };
int[] array2 = { 20, 1, 65, 183, 38, 89, 34 };

// 第一种方式:分别把两个数组的值放到两个不同的list集合中,使用removeAll方法进行去重
List<Integer> list1 = new ArrayList<Integer>();
List<Integer> list2 = new ArrayList<Integer>();
for (int i = 0; i < array1.length; i++) {
list1.add(array1[i]);
}
for (int j = 0; j < array2.length; j++) {
list2.add(array2[j]);
}
list1.removeAll(list2);
System.out.println("第一种方式:" + list1.get(0));

// 第二种方式:分别把两个数组的值求和,并把两个结果相减,然后使用Math.abs()方法取绝对值
int sum1 = 0;
int sum2 = 0;
for (int i = 0; i < array1.length; i++) {
sum1 += array1[i];
}
for (int j = 0; j < array2.length; j++) {
sum2 += array2[j];
}
System.out.println("第二种方式:" + Math.abs(sum1 - sum2));

// 第三种方式:使用^:异或
// 异或的性质:两个相同的数异或结果一定为0,把两个数组里的元素都进行异或,得到的结果就是所求的结果
int c = 0;
for (int i = 0; i < array2.length; i++) {
// 按照数组短的数组进行异或
c ^= array2[i] ^ array1[i];
}
// 数组长的剩余的那个元素,与之前结果进行异或,得到最后结果
c ^= array1[array1.length - 1];
System.out.println("第三种方式:" + c);

System.out.println("---------------------------------");
// 使用异或的这个特性进行字符串加密测试
String str = "加密测试密码";
System.out.println("原始密码:"+str);
String passwordNew = "";
String passwordOld = "";
int key = 0xAB;
for (int i = 0; i < str.length(); i++) {
passwordNew += (char) (str.charAt(i) ^ key);
}
System.out.println("加密后密码:"+passwordNew);
for (int i = 0; i < passwordNew.length(); i++) {
passwordOld += (char) (passwordNew.charAt(i) ^ key);
}
System.out.println("还原原始密码:"+passwordOld);
}
}

本文共展示三种方式,以及异或方式的一种加密延展测试,得到的结果如下图所示:

                         java-两个数组,寻找多出来的元素