Java重写equals方法和hashCode方法

本文探讨了Java中HashSet的工作原理,特别是在对象池中如何通过重写equals和hashCode方法来识别相同对象,避免重复添加。使用User类作为示例,展示了当id相同时,即使创建了不同的User实例,HashSet也会将其视为同一对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

package com.ddy;



public class User {

    private Integer id;



    private String name;



    private String address;



    private String phone;



    public Integer getId() {

        return id;

    }



    public void setId(Integer id) {

        this.id = id;

    }



    public String getName() {

        return name;

    }



    public void setName(String name) {

        this.name = name == null ? null : name.trim();

    }



    public String getAddress() {

        return address;

    }



    public void setAddress(String address) {

        this.address = address == null ? null : address.trim();

    }



    public String getPhone() {

        return phone;

    }



    public void setPhone(String phone) {

        this.phone = phone == null ? null : phone.trim();

    }



    @Override

    public int hashCode() {

        final int prime = 31;

        int result = 1;

        result = prime * result + ((id == null) ? 0 : id.hashCode());

        return result;

    }



    @Override

    public boolean equals(Object obj) {

        if (this == obj)

            return true;

        if (obj == null)

            return false;

        if (getClass() != obj.getClass())

            return false;

        User other = (User) obj;

        if (id == null) {

            if (other.id != null)

                return false;

        } else if (!id.equals(other.id))

            return false;

        return true;

    }



    public User(Integer id) {

        super();

        this.id = id;

    }

    

}

Person根据id重写了equals和hashCode方法;这样HashSet添加people的时候会将id重复的people对象视为同一个people对象。

package com.ddy;


import java.util.HashSet;
import java.util.Set;

public class Test {
    public static void main(String[] args) {
        User user1 = new User(1);
        User user2 = new User(1);
        Set<User> users = new HashSet<>();
        users.add(user2);
        users.add(user1);
        System.out.println(users);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值