在Java中,去除数组中的重复元素可以通过以下几种方法实现:
1. 使用`HashSet`或`LinkedHashSet`:
`HashSet`不保留元素插入顺序,适合不关心元素顺序的情况。
`LinkedHashSet`保留元素插入顺序,适合需要保持原始顺序的情况。
import java.util.Arrays;import java.util.HashSet;import java.util.LinkedHashSet;public class RemoveDuplicatesFromArray {public static void main(String[] args) {Integer[] arr = {1, 2, 3, 4, 3, 2, 1};Setset = new HashSet<>(); for (int num : arr) {set.add(num);}Integer[] distinctArr = set.toArray(new Integer);System.out.println(Arrays.toString(distinctArr));}}
2. 使用`Arrays.stream().distinct().toArray()`方法(Java 8及以上版本):
import java.util.Arrays;public class RemoveDuplicatesFromArray {public static void main(String[] args) {Integer[] arr = {1, 2, 3, 4, 3, 2, 1};Integer[] distinctArr = Arrays.stream(arr).distinct().toArray(Integer[]::new);System.out.println(Arrays.toString(distinctArr));}}
3. 双层循环检查法:
public class RemoveDuplicatesFromArray {public static void main(String[] args) {Integer[] arr = {1, 2, 3, 4, 3, 2, 1};int[] distinctArr = new int[arr.length];int index = 0;for (int i = 0; i < arr.length; i++) {boolean isDuplicate = false;for (int j = i + 1; j < arr.length; j++) {if (arr[i].equals(arr[j])) {isDuplicate = true;break;}}if (!isDuplicate) {distinctArr[index++] = arr[i];}}distinctArr = Arrays.copyOf(distinctArr, index);System.out.println(Arrays.toString(distinctArr));}}
4. 使用`System.arraycopy`方法:
public class RemoveDuplicatesFromArray {public static void main(String[] args) {Integer[] arr = {1, 2, 3, 4, 3, 2, 1};int[] distinctArr = new int[arr.length];int j = 0;for (int i = 0; i < arr.length; i++) {boolean isDuplicate = false;for (int k = i + 1; k < arr.length; k++) {if (arr[i].equals(arr[k])) {isDuplicate = true;break;}}if (!isDuplicate) {distinctArr[j++] = arr[i];}}int[] finalDistinctArr = new int[j];System.arraycopy(distinctArr, 0, finalDistinctArr, 0, j);System.out.println(Arrays.toString(finalDistinctArr));}}
以上方法均可用于去除数组中的重复元素,具体选择哪种方法取决于你对元素顺序的保留需求以及是否关心性能。`HashSet`和`LinkedHashSet`方法在大多数情况下性能较好,而`Arrays.stream().distinct().toArray()`方法则利用了Java 8的流特性,代码简洁。双层循环检查法虽然直观,但效率较低。使用`System.arraycopy`可以在原数组的基础上直接操作,减少内存分配。
请根据你的具体需求选择合适的方法

