要求:去除二维数组中的重复元素

思路:试试不用集合的方式去重复元素,首先我想到的是需要一个去重后存储元素的新数组,然后在两层嵌套循环,外层遍历原数组,内层逐一判断是否和后面的元素重合,然后在存入新数组。(这时候会出现一个问题,请往下看!)

// 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 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/hu430703/article/details/79361301