Java中如何高效实现相同值数据的过滤与去重?
- 后端开发
- 2025-10-22
- 10
在Java中,相同值的过滤是一个常见的需求,尤其是在处理大量数据时,以下是一些常用的方法来实现相同值的过滤:
使用HashSet
HashSet是一个基于哈希表的集合,它不允许重复的元素,可以将集合中的元素添加到HashSet中,HashSet会自动过滤掉重复的元素。

使用LinkedHashSet
LinkedHashSet是HashSet的子类,它维护了一个双向链表来记录元素的插入顺序,与HashSet类似,它也可以过滤重复的元素。
import java.util.LinkedHashSet; import java.util.Set; public class Main { public static void main(String[] args) { Integer[] numbers = {1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10}; Set<Integer> uniqueNumbers = new LinkedHashSet<>(); for (Integer number : numbers) { uniqueNumbers.add(number); } System.out.println(uniqueNumbers); } }
使用ArrayList和contains方法
如果需要保持元素的插入顺序,可以使用ArrayList结合contains方法来过滤重复的元素。
import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { Integer[] numbers = {1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10}; List<Integer> uniqueNumbers = new ArrayList<>(); for (Integer number : numbers) { if (!uniqueNumbers.contains(number)) { uniqueNumbers.add(number); } } System.out.println(uniqueNumbers); } }
使用Stream API
Java 8引入了Stream API,它可以简化集合操作,使用Stream API,可以轻松地过滤重复的元素。
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { Integer[] numbers = {1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10}; List<Integer> uniqueNumbers = Arrays.stream(numbers) .distinct() .collect(Collectors.toList()); System.out.println(uniqueNumbers); } }
使用Java 9的Set接口
Java 9引入了Set接口的newSetFromMap方法,可以直接从Map中创建一个Set,从而过滤重复的元素。
import java.util.Arrays; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { Integer[] numbers = {1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10}; Map<Integer, Boolean> map = Arrays.stream(numbers) .collect(Collectors.toMap( number > number, number > true, (existing, replacement) > existing )); Set<Integer> uniqueNumbers = map.keySet(); System.out.println(uniqueNumbers); } }
FAQs
Q1:如何使用HashSet过滤字符串中的重复值?

A1: 使用HashSet过滤字符串中的重复值与过滤整数类似,以下是一个示例:
import java.util.HashSet; import java.util.Set; public class Main { public static void main(String[] args) { String[] strings = {"apple", "banana", "apple", "orange", "banana", "grape"}; Set<String> uniqueStrings = new HashSet<>(); for (String string : strings) { uniqueStrings.add(string); } System.out.println(uniqueStrings); } }
Q2:如何使用Stream API过滤List中的重复值并保持顺序?
A2: 使用Stream API过滤List中的重复值并保持顺序,可以使用distinct()方法和collect(Collectors.toList()),以下是一个示例:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { Integer[] numbers = {1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10}; List<Integer> uniqueNumbers = Arrays.stream(numbers) .distinct() .collect(Collectors.toList()); System.out.println(uniqueNumbers); } }
