Java数组去除重复元素的方法和技巧有哪些?
- 后端开发
- 2025-09-25
- 6
在Java中,数组去重是一个常见的需求,数组本身不支持直接去重,因此我们需要使用一些方法来实现,以下是一些常用的Java数组去重方法:
使用HashSet
HashSet是一个不允许重复元素的集合,因此可以将数组中的元素添加到HashSet中,然后再将HashSet中的元素复制回数组,这种方法简单且效率较高。
使用LinkedHashSet
LinkedHashSet是HashSet的一个子类,它不仅保证了元素的唯一性,还保持了元素的插入顺序,如果你需要保持数组元素的原始顺序,可以使用LinkedHashSet。
import java.util.LinkedHashSet; import java.util.Arrays; public class ArrayDeduplication { public static void main(String[] args) { Integer[] array = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5}; Integer[] deduplicatedArray = deduplicateUsingLinkedHashSet(array); System.out.println(Arrays.toString(deduplicatedArray)); } public static Integer[] deduplicateUsingLinkedHashSet(Integer[] array) { LinkedHashSet<Integer> set = new LinkedHashSet<>(); for (Integer element : array) { set.add(element); } return set.toArray(new Integer[0]); } }
使用双重循环
对于基本数据类型的数组,可以使用双重循环来实现去重,这种方法效率较低,但代码简单易懂。

public class ArrayDeduplication { public static void main(String[] args) { Integer[] array = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5}; Integer[] deduplicatedArray = deduplicateUsingDoubleLoop(array); System.out.println(Arrays.toString(deduplicatedArray)); } public static Integer[] deduplicateUsingDoubleLoop(Integer[] array) { int n = array.length; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (array[i].equals(array[j])) { array[j] = null; } } } return arrayWithoutNulls(array); } public static Integer[] arrayWithoutNulls(Integer[] array) { int count = 0; for (Integer element : array) { if (element != null) { count++; } } Integer[] result = new Integer[count]; int index = 0; for (Integer element : array) { if (element != null) { result[index++] = element; } } return result; } }
使用Stream API
Java 8引入了Stream API,它提供了更简洁、更高效的代码,使用Stream API去重,可以保持元素的原始顺序。

import java.util.Arrays; import java.util.stream.Collectors; public class ArrayDeduplication { public static void main(String[] args) { Integer[] array = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5}; Integer[] deduplicatedArray = deduplicateUsingStreamApi(array); System.out.println(Arrays.toString(deduplicatedArray)); } public static Integer[] deduplicateUsingStreamApi(Integer[] array) { return Arrays.stream(array).distinct().toArray(Integer[]::new); } }
FAQs
Q1:为什么使用HashSet或LinkedHashSet去重时需要使用toArray方法?
A1:HashSet和LinkedHashSet都是集合类,不是数组,我们需要使用toArray方法将集合中的元素转换回数组。
Q2:为什么使用双重循环去重时,还需要使用arrayWithoutNulls方法?
A2:在使用双重循环去重时,我们可能会将重复的元素设置为null,我们需要使用arrayWithoutNulls方法来过滤掉数组中的null元素,得到最终的去重数组。
