1. 程式人生 > >去除陣列中的重複元素-JAVA

去除陣列中的重複元素-JAVA

要求:去除二維陣列中的重複元素

思路:試試不用集合的方式去重複元素,首先我想到的是需要一個去重後儲存元素的新陣列,然後在兩層巢狀迴圈,外層遍歷原陣列,內層逐一判斷是否和後面的元素重合,然後在存入新陣列。(這時候會出現一個問題,請往下看!)

// 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了,寫出來分享給大家,大家多多指教吐舌頭