數組去重是在我們日常開發中比較常見的需求,Java中提供很多種方法可以實現數組去重,下面我們將從多個方面對Java數組去重做詳細的闡述。
一、使用HashSet去重
HashSet是基於HashMap實現的,採用哈希表來實現,HashSet中不允許有重複元素,因此可以用HashSet來實現數組去重。具體實現思路是將數組中的元素逐一添加到HashSet中,HashSet會自動去重,再將去重後的結果轉換成數組。
/** * 使用HashSet去重 * * @param arr 需要去重的數組 * @return 去重後的數組 */ public static int[] distinctByHashSet(int[] arr) { Set set = new HashSet(); for (int i = 0; i < arr.length; i++) { set.add(arr[i]); } int[] newArr = new int[set.size()]; int index = 0; Iterator iterator = set.iterator(); while (iterator.hasNext()) { newArr[index++] = iterator.next(); } return newArr; }
二、使用TreeSet去重
TreeSet是基於樹結構的實現,按照元素的大小進行排序,也會自動去重。具體實現思路與使用HashSet類似,將元素加入到TreeSet中,然後將去重後的結果轉換成數組。
/** * 使用TreeSet去重 * * @param arr 需要去重的數組 * @return 去重後的數組 */ public static int[] distinctByTreeSet(int[] arr) { Set set = new TreeSet(); for (int i = 0; i < arr.length; i++) { set.add(arr[i]); } int[] newArr = new int[set.size()]; int index = 0; Iterator iterator = set.iterator(); while (iterator.hasNext()) { newArr[index++] = iterator.next(); } return newArr; }
三、使用Stream流去重
Java 8中引入了Stream API,Stream提供了很多高階函數,可以大大簡化代碼,使用Stream的distinct()方法可以很方便地實現數組去重。具體實現思路是將數組轉換成Stream對象,調用Stream的distinct()方法後再將結果轉換成數組。
/** * 使用Stream去重 * * @param arr 需要去重的數組 * @return 去重後的數組 */ public static int[] distinctByStream(int[] arr) { return Arrays.stream(arr).distinct().toArray(); }
四、使用循環去重
這是最普通的做法,通過雙重循環遍曆數組,在內層循環中判斷是否有重複值,如果有則將重複值刪除。具體實現思路如下:
- 外層循環遍曆數組
- 內層循環遍曆數組,從外層循環的下一個元素開始遍歷
- 如果有重複元素,將重複元素刪除
- 返回去重後的數組
/** * 使用循環去重 * * @param arr 需要去重的數組 * @return 去重後的數組 */ public static int[] distinctByLoop(int[] arr) { int len = arr.length; for (int i = 0; i < len; i++) { for (int j = i + 1; j < len; j++) { if (arr[i] == arr[j]) { arr[j] = arr[len - 1]; len--; j--; } } } return Arrays.copyOf(arr, len); }
五、使用排序去重
可以先將原數組進行排序,然後遍歷排序後的數組,將相同的元素去掉。具體實現思路如下:
- 對原數組進行排序,使用Arrays.sort()方法
- 定義新數組,長度為去重後的數組長度
- 遍歷排序後的數組,將第一個元素直接放入新數組中
- 從第二個元素開始遍歷,判斷是否與前一個元素相等,如果不相等就將該元素放入新數組中
- 返回去重後的新數組
/** * 使用排序去重 * * @param arr 需要去重的數組 * @return 去重後的數組 */ public static int[] distinctBySort(int[] arr) { Arrays.sort(arr); int len = arr.length; int[] newArr = new int[len]; int index = 0; newArr[index++] = arr[0]; for (int i = 1; i < len; i++) { if (arr[i] != arr[i - 1]) { newArr[index++] = arr[i]; } } return Arrays.copyOf(newArr, index); }
總結
Java數組去重的方法有很多,我們可以根據實際需求選擇不同的方法。HashSet和TreeSet適用於數據量較小的情況;Stream流適用於Java 8及以上版本;循環去重和排序去重適用於數據量較大的情況。在實際開發中,我們應該根據實際需求和數據量選擇不同的去重方法,以達到更好的效果。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/305043.html