Java HashSet 在业务去重场景怎么用

阿芳酱_5377

阿芳酱_5377

2026-11-14

228人浏览

原创

java hashset 在业务去重场景的核心用法是依赖对象的 equals() 和 hashcode() 方法实现 o(1) 时间复杂度的快速查找与插入。具体做法是将需要去重的对象实例直接添加到 hashset 中,若集合中已存在逻辑上相等的元素(即 equals() 返回 true),则新元素会被自动忽略,从而保证集合内元素的唯一性。

Java HashSet 在业务去重场景怎么用

HashSet 如何判定两个对象是否重复

HashSet 通过哈希表结构进行去重,判定过程分为两步:首先计算对象的 hashCode() 值以确定桶位置,若该位置已有元素,则进一步调用 equals() 方法进行逐字段比对。只有当 hashCode() 相同且 equals() 返回 true 时,系统才认定这两个对象重复。因此,在自定义类中必须同时重写这两个方法,否则默认使用内存地址进行比较,导致业务逻辑上的重复对象被误判为不同元素。

Java HashSet 在业务去重场景怎么用

import java.util.HashSet;
import java.util.Objects;

public class User {
    private String id;
    private String name;

    public User(String id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof User)) return false;
        User user = (User) o;
        return Objects.equals(id, user.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    public static void main(String[] args) {
        HashSet<user> set = new HashSet();
        set.add(new User("001", "Alice"));
        set.add(new User("001", "Bob")); // 逻辑重复,不会添加
        System.out.println(set.size()); // 输出 1
    }
}</user>

如何处理 HashSet 中的空值与不可变字段

在使用 HashSet 时,必须确保作为键值的对象字段是不可变的,或者在放入集合后不再修改参与 equals() 比较的字段。如果对象在加入集合后被修改了 hashCode() 相关的属性,会导致哈希冲突或无法正确检索。此外,HashSet 允许存储一个 null 值,因为 null 的哈希码被特殊处理为 0,但多次添加 null 只会保留一个实例。

JavaScript 测试模式
JavaScript 测试模式

使用 Jest、Vitest 和 Testing Library 实施全面的测试策略,包括单元测试、集成测试和端到端测试,涵盖模拟、测试夹具和测试驱动开发。在编

下载

Java HashSet 在业务去重场景怎么用

import java.util.HashSet;
import java.util.Objects;

public class Product {
    private final String sku;
    private String status;

    public Product(String sku) {
        this.sku = sku;
        this.status = "active";
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Product)) return false;
        Product product = (Product) o;
        return Objects.equals(sku, product.sku);
    }

    @Override
    public int hashCode() {
        return Objects.hash(sku);
    }

    public static void main(String[] args) {
        HashSet<product> products = new HashSet();
        products.add(null); // 允许添加 null
        products.add(null); // 再次添加 null,被忽略
        products.add(new Product("P100"));
        
        // 尝试修改状态,不影响去重逻辑
        products.iterator().next().setStatus("inactive");
        
        System.out.println(products.size()); // 输出 2
    }

    public void setStatus(String status) {
        this.status = status;
    }
}</product>

基于 HashSet 过滤列表中的重复项

在实际业务中,通常需要将一个包含重复数据的 List 转换为无重复的集合。最直接的做法是构造一个新的 HashSet 并传入原列表,利用构造函数内部的迭代添加机制完成去重。这种方式比手动遍历判断更高效,且能保持插入顺序的稳定性(如果使用 LinkedHashSet)。对于基本类型数组,需先包装为对象或使用 Stream API 配合 Collectors.toSet() 来实现。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

java

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

12577

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

9662

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

8232

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1324

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

1048

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1576

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

3289

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20531

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1435

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习