在Java开发中,处理数字集合时经常需要去除重复元素,再将结果转换为列表返回,不同实现方式适用于不同的场景,下面详细介绍几种常用的实现方法。

基于HashSet的实现方式
HashSet本身不允许存储重复元素,利用这个特性可以快速完成数字去重,不过HashSet不保证元素的顺序,如果需要保持原有顺序,不建议使用这种方式。
实现步骤如下:
- 创建HashSet对象,将待去重的数字集合添加进去,自动完成去重
- 将HashSet转换为ArrayList返回即可
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class NumberDedupDemo {
// 基于HashSet去重后返回列表
public static List<Integer> dedupWithHashSet(List<Integer> numbers) {
// 利用HashSet去重,不保证顺序
Set<Integer> numberSet = new HashSet<>(numbers);
// 转换为列表返回
return new ArrayList<>(numberSet);
}
public static void main(String[] args) {
List<Integer> testNumbers = new ArrayList<>();
testNumbers.add(1);
testNumbers.add(2);
testNumbers.add(2);
testNumbers.add(3);
testNumbers.add(3);
testNumbers.add(3);
List<Integer> result = dedupWithHashSet(testNumbers);
System.out.println(result);
}
}基于LinkedHashSet的实现方式
LinkedHashSet继承自HashSet,同样不允许重复元素,但是它会维护元素的插入顺序,适合需要保持原有数字出现顺序的去重场景。
实现逻辑和HashSet类似,只是将集合类型替换为LinkedHashSet,代码如下:
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public class NumberDedupDemo {
// 基于LinkedHashSet去重,保持原有顺序
public static List<Integer> dedupWithLinkedHashSet(List<Integer> numbers) {
// LinkedHashSet会保留元素插入顺序
Set<Integer> numberSet = new LinkedHashSet<>(numbers);
return new ArrayList<>(numberSet);
}
public static void main(String[] args) {
List<Integer> testNumbers = new ArrayList<>();
testNumbers.add(3);
testNumbers.add(1);
testNumbers.add(2);
testNumbers.add(2);
testNumbers.add(3);
List<Integer> result = dedupWithLinkedHashSet(testNumbers);
// 输出结果为[3,1,2],和原集合首次出现顺序一致
System.out.println(result);
}
}基于Stream API的实现方式
Java 8及以上版本可以使用Stream API的distinct()方法快速去重,代码更加简洁,还可以灵活选择是否保持顺序。
distinct()方法会基于元素的equals()方法判断重复,对于数字类型可以直接使用,若需要保持顺序,使用顺序流即可,并行流无法保证顺序。
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class NumberDedupDemo {
// 基于Stream API去重,顺序流保持原有顺序
public static List<Integer> dedupWithStream(List<Integer> numbers) {
return numbers.stream()
.distinct() // 去重操作
.collect(Collectors.toList()); // 收集为列表
}
public static void main(String[] args) {
List<Integer> testNumbers = new ArrayList<>();
testNumbers.add(5);
testNumbers.add(3);
testNumbers.add(5);
testNumbers.add(2);
testNumbers.add(2);
List<Integer> result = dedupWithStream(testNumbers);
System.out.println(result);
}
}不同方式对比
三种实现方式的特点和适用场景如下:
| 实现方式 | 是否保持顺序 | 代码简洁度 | 适用场景 |
|---|---|---|---|
| HashSet | 否 | 中等 | 不需要顺序,追求去重效率的场景 |
| LinkedHashSet | 是 | 中等 | 需要保持原有插入顺序的场景 |
| Stream API | 顺序流是,并行流否 | 高 | Java 8及以上版本,追求代码简洁的场景 |
开发者可以根据项目使用的Java版本和具体需求,选择合适的去重转列表实现方式,让代码更高效易维护。
Java数字去重List转换集合操作Stream_API修改时间:2026-06-05 23:07:00