去除陣列中的重複元素-JAVA
阿新 • • 發佈:2019-01-24
要求:去除二維陣列中的重複元素
思路:試試不用集合的方式去重複元素,首先我想到的是需要一個去重後儲存元素的新陣列,然後在兩層巢狀迴圈,外層遍歷原陣列,內層逐一判斷是否和後面的元素重合,然後在存入新陣列。(這時候會出現一個問題,請往下看!)
// 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了,寫出來分享給大家,大家多多指教