【Java-HashSet】重写toString、hashCode、equals

JDK - 17/18
IDE - idea
package HashSet_Test;

import java.util.HashSet;

public class Test {
    public static void main(String[] args) {

        // TODO HashSet 无序 不重复

        // 创建HashSet对象
        HashSet set = new HashSet();

        // 创建User对象
        User user1 = new User();
        user1.id = 1001;
        user1.name = "zhangsan";

        User user2 = new User();
        user2.id = 1001;
        user2.name = "zhangsan";

        User user3 = new User();
        user3.id = 1002;
        user3.name = "lisi";

        // 把User对象添加到HashSet中
        set.add(user1);
        set.add(user2);
        set.add(user3);

        // 打印HashSet
        System.out.println(set);

    }
}

class User {

    public int id;
    public String name;

    @Override
    // 重写toString 如果不重写toString 打印的是地址
    public String toString() {
//        return super.toString();
        return "User[" + id + ", " + name + "]";
    }

    @Override
    // 类似于内存地址
    // 重写hashCode 不重写hashCode的话 比较的是内存地址 直接判断是不同的对象 也会出现两个zhangsan
    public int hashCode() {
//        return super.hashCode();
        return id;
    }

    @Override
    // 重写equals 如果不重写 将出现两个zhangsan
    public boolean equals(Object obj) {
//        return super.equals(obj);
        // 首先判断对象是否是User
        if ( obj instanceof User ) {
            User user = (User) obj;
            // 然后判断id是否相等
            if ( user.id == this.id ) {
                // 最后判断name是否相等
                if ( user.name.equals(this.name) ) {
                    return true;
                }
            }
            return false;
        }
        return false;
    }
}

运行结果

"C:\Program Files\Java\jdk-17\bin\java.exe" "-javaagent:C:\Program Files\JetBrains(Com)\IntelliJ IDEA Community Edition 2022.2.2\lib\idea_rt.jar=60788:C:\Program Files\JetBrains(Com)\IntelliJ IDEA Community Edition 2022.2.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\86139\Desktop\java\java-learning-test\out\production\java-learning-test HashSet_Test.Test
[User[1001, zhangsan], User[1002, lisi]]

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值