重写equals后为什么要重写hashcode方法
  SCMbws0qCYMy 2023年11月28日 14 0

重写equals后为什么要重写hashcode方法

1.set存储string字符串

重写equals后为什么要重写hashcode方法_User

2.只重写equals 不重写hashcode

重写equals后为什么要重写hashcode方法_System_02

set中存在两个一样的并没有去重

重写equals后为什么要重写hashcode方法_System_03

3.重写equals 也重写hashcode

重写equals后为什么要重写hashcode方法_User_04

set中只有一个对象

重写equals后为什么要重写hashcode方法_User_05

结论

Set 去重时,会先判断hashcode是否相同 再去判断equals方法是否相同

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

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

        //set保存string
//        Set<String> set = new HashSet();
//        set.add("zhangsan");
//        set.add("zhangsan");
//        set.add("lisi");
//        set.add("wangwu");
//        System.out.println("Set集合长度:" + set.size());
//        System.out.println();
//        set.forEach(d -> System.out.println(d));

        //set存储对象
        // 对象 1
        User p1 = new User();
        p1.setName("zhangsan");
        p1.setAge(18);
        // 对象 2
        User p2 = new User();
        p2.setName("zhangsan");
        p2.setAge(18);
        // 创建 Set 对象
        Set<User> set = new HashSet<User>();
        set.add(p1);
        set.add(p2);
        // 打印 Set 中的所有数据
        set.forEach(p -> {
            System.out.println(p);
        });

    }

    static class User{
        private String name;
        private int age;

        @Override
        public boolean equals(Object o) {
            if (this == o) return true; // 引用相等返回 true
            // 如果等于 null,或者对象类型不同返回 false
            if (o == null || getClass() != o.getClass()) return false;
            // 强转为自定义 User 类型
            User user = (User) o;
            // 如果 age 和 name 都相等,就返回 true
            return age == user.age &&
                    Objects.equals(name, user.name);
        }

        @Override
        public int hashCode() {
            // 对比 name 和 age 是否相等
            return Objects.hash(name, age);
        }

        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }

        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }

    }
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月28日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   54   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   109   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
SCMbws0qCYMy