要求:去除二维数组中的重复元素
思路:试试不用集合的方式去重复元素,首先我想到的是需要一个去重后存储元素的新数组,然后在两层嵌套循环,外层遍历原数组,内层逐一判断是否和后面的元素重合,然后在存入新数组。(这时候会出现一个问题,请往下看!)
// 1、去除数组中重复的元素
public static void test(int[] arr) {
// 定义新数组
int[] newarr = new int[arr.length];
// 新数组索引
int index = 0;
for (int i = 0; i < arr.length; i++) {
// 声明一个标记,每次重置
boolean biaoji = true;
// 内层循环将原数组元素逐个比较
for (int j = i + 1; j < arr.length; j++) {
// 判断是否重复,重复改变标记,结束内层循环
if (arr[i] == arr[j]) {
biaoji = false;
break;
}
}
// 判断标记是否被改变,如果没被改变,将原数组元素赋给新数组,下标++
if (biaoji) {
newarr[index] = arr[i];
index++;
}
}
// 打印出新数组
for (int a : newarr) {
System.out.print(a);
}
}
测试:定义一个二维素组 int[] arr = new int[] { 1, 5, 4, 5, 8, 7, 1, 1 };去重后的打印结果
为什么会这样呢?原来新数组存的是去重后的数组,重复元素被剔除,而我前面定义的新数组长度与原数组相同,所以后面会自动补0。
优化:经过我的一番思考我发现可以用arraycopy这个方法将去重后的数组在拷贝到一个新数组里面,就可以解决这个问题了。(代码如下)
// 1、去除数组中重复的元素
public static void test(int[] arr) {
// 定义临时数组
int[] newarr = new int[arr.length];
// 新数组索引
int index = 0;
for (int i = 0; i < arr.length; i++) {
// 声明一个标记,每次重置
boolean biaoji = true;
// 内层循环将原数组元素逐个比较
for (int j = i + 1; j < arr.length; j++) {
// 判断是否重复,重复改变标记,结束内层循环
if (arr[i] == arr[j]) {
biaoji = false;
break;
}
}
// 判断标记是否被改变,如果没被改变,将原数组元素赋给新数组,下标++
if (biaoji) {
newarr[index] = arr[i];
index++;
}
}
// 定义新数组
int[] newarrs = new int[index];
// 复制
System.arraycopy(newarr, 0, newarrs, 0, index);
// 循环打印数组元素
for (int a : newarrs) {
System.out.print(a);
}
}
测试:
这样就ok了,写出来分享给大家,大家多多指教
版权声明:本文为hu430703原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。