哈希值


哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
同一个对象多次调用hashCode()方法返回的哈希值是相同的
默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同

package com.ding.hashtest;


import com.ding.mytreeset.Student;

public class Hashcodetest {

    public static void main(String[] args) {
        Student s1 = new Student("aaa",22);
        Student s2 = new Student("bbb",23);

        //在object类中是根据对象的地址值计算出来的哈希值
        System.out.println(s1.hashCode());//1163157884
        System.out.println(s1.hashCode());//1163157884
        
        System.out.println(s2.hashCode());//1956725890

    }
}
  • 创建一个存储学生对象的集合,存储多个学生对象,使用程序实现在控制台遍历该集合
  • 要求:学生对象的成员变量值相同,我们就认为是同一个对象

package com.ding.hashtest;


import java.util.Objects;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = 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 boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }


    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

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

package com.ding.hashtest;




import java.util.HashSet;

public class Hashcodetest1 {

    public static void main(String[] args) {

        HashSet<Student> hs = new HashSet<>();

        Student s1 = new Student("aaa",22);
        Student s2 = new Student("bbb",23);
        Student s3 = new Student("bbb",23);

        hs.add(s1);
        hs.add(s2);
        hs.add(s3);

        for (Student student : hs) {
            System.out.println(student);
        }
    }
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM