哈希值概述和特点
-
哈希值概述
哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
Object类中有一个方法可以获取对象的哈希值:
- public int hashCode():返回对象的哈希值
-
哈希值特点
同一个对象多次调用hashCode()方法返回的哈希值是相同的
默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法可以实现让不同对象的哈希值相同
创建一个学生类:Student
package com.gather.set.example; 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; if (age != student.age) return false; return name != null ? name.equals(student.name) : student.name == null; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + age; return result; } }
测试类:
package com.gather.set.example; public class HashDemo { public static void main(String[] args) { Student s1 = new Student("郝佳乐",20); System.out.println(s1.hashCode()); System.out.println(s1.hashCode()); System.out.println("===================="); Student s2= new Student("郝佳乐",20); //通过方法重写可以实现不同对象的哈希值是相同的 System.out.println(s2.hashCode()); System.out.println("======================"); System.out.println("hello".hashCode()); System.out.println("world".hashCode()); System.out.println("java".hashCode()); System.out.println("======================="); System.out.println("重地".hashCode()); System.out.println("通话".hashCode()); } }
同一个对象多次调用hashCode()方法返回的哈希值是相同的,默认情况下,不同对象的哈希值是不同的,如过要实现不同对象的哈希值是相同的需要重写方法。在此代码中还验证了字符串内容不同时,输出的哈希值是相同的,“重地”和“通话”,这是哈希冲突导致的。