在日常的Java开发中,我们经常会遇到需要对数据进行去重的场景。比如用户列表、商品ID、日志记录等,重复的数据不仅浪费内存,还可能影响业务逻辑。本文将手把手教你如何使用Java去重方法,无论你是刚入门的新手,还是有一定经验的开发者,都能从中受益。

想象一下,你有一个包含1000个用户手机号的列表,但其中有不少重复号码。如果你直接发送短信,可能会多次打扰同一个用户。这时候,使用Java集合去重就显得尤为重要。
最简单的去重方式是利用 Set 接口的特性——它不允许重复元素。我们可以将 List 转换为 HashSet,再转回 List。
import java.util.*;public class DeduplicationExample { public static void main(String[] args) { List<String> list = Arrays.asList("apple", "banana", "apple", "orange", "banana"); // 使用HashSet去重 Set<String> set = new HashSet<>(list); List<String> uniqueList = new ArrayList<>(set); System.out.println(uniqueList); // 输出顺序可能不固定 }}⚠️ 注意:这种方式会丢失原始顺序。如果你需要保持元素插入顺序,可以使用 LinkedHashSet。
Java 8 引入了强大的 Stream API,配合 distinct() 方法,可以非常优雅地实现去重,并且保留原始顺序。这是目前最常用的Java Stream去重方式。
import java.util.*;import java.util.stream.Collectors;public class StreamDeduplication { public static void main(String[] args) { List<String> list = Arrays.asList("apple", "banana", "apple", "orange", "banana"); List<String> uniqueList = list.stream() .distinct() .collect(Collectors.toList()); System.out.println(uniqueList); // [apple, banana, orange] }}如果列表中存储的是自定义对象(如 User),默认的 distinct() 是基于 equals() 和 hashCode() 判断是否重复的。因此,你需要在类中正确重写这两个方法。
class User { private String name; private int id; public User(String name, int id) { this.name = name; this.id = id; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return id == user.id; } @Override public int hashCode() { return Objects.hash(id); } @Override public String toString() { return "User{" + "name='" + name + "', id=" + id + '}'; }}// 使用List<User> users = Arrays.asList( new User("Alice", 1), new User("Bob", 2), new User("Alice", 1));List<User> uniqueUsers = users.stream().distinct().collect(Collectors.toList());有时你只想根据对象的某个字段(如 name)去重,而不是整个对象。这时可以借助 Collectors.toMap() 或自定义收集器。
// 按 name 字段去重List<User> uniqueByName = users.stream() .collect(Collectors.toMap( User::getName, user -> user, (existing, replacement) -> existing, LinkedHashMap::new)) .values() .stream() .collect(Collectors.toList());本文详细介绍了多种 Java去重方法,包括:
HashSet / LinkedHashSet 实现基础去重Stream.distinct() 优雅去重(保留顺序)equals 和 hashCode掌握这些方法后,无论是处理 ArrayList去重 还是复杂对象去重,你都能游刃有余。建议在实际项目中优先使用 Java Stream去重,代码简洁且可读性强。
希望这篇教程对你有所帮助!如果你觉得有用,欢迎分享给更多正在学习Java的朋友。
本文由主机测评网于2025-12-04发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025122922.html