哈希值


哈希值是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