首页 > 技术文章 > JavaSE-15.1.2【哈希值】

yppah 2021-05-31 21:21 原文

 1 package day6.lesson1;
 2 
 3 /*
 4 1.2哈希值
 5 
 6     哈希值简介
 7         是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
 8     如何获取哈希值
 9         Object类中的public int hashCode():返回对象的哈希码值
10     哈希值的特点
11         同一个对象多次调用hashCode()方法返回的哈希值是相同的
12         默认情况下,不同对象的哈希值是不同的。
13         而重写hashCode()方法,可以实现让不同对象的哈希值相同
14  */
15 public class HashDemo2 {
16     public static void main(String[] args) {
17         Student s1 = new Student("tom", 12);
18         System.out.println(s1.hashCode()); //1163157884
19         System.out.println(s1.hashCode()); //1163157884
20 
21         Student s2 = new Student("tom", 12);
22         System.out.println(s2.hashCode()); //1956725890
23 
24         System.out.println("hello".hashCode()); //99162322
25         System.out.println("hello".hashCode()); //99162322
26         System.out.println("world".hashCode()); //113318802
27 
28         System.out.println("菏泽曹县".hashCode()); //1032889204
29         System.out.println("牛批666".hashCode()); //2017328440
30 
31         /*System.out.println("重地".hashCode()); //1179395
32         System.out.println("通话".hashCode()); //1179395*/
33         /*
34         通过查找技术文档发现,String中的重写了hashCode方法,但是String类的hashCode算法是固定的
35         str.charAt(0) * 31n-1 + str.charAt(1) * 31n-2 + … + str.charAt(n-1)
36         根据算法就可以看到是可能会存在相同hashCode的
37          */
38     }
39 }
 1 package day6.lesson1;
 2 
 3 public class Student {
 4 
 5     private String name;
 6     private int age;
 7 
 8     public Student() {
 9     }
10 
11     public Student(String name, int age) {
12         this.name = name;
13         this.age = age;
14     }
15 
16     public void setName(String name) {
17         this.name = name;
18     }
19 
20     public void setAge(int age) {
21         this.age = age;
22     }
23 
24     public String getName() {
25         return name;
26     }
27 
28     public int getAge() {
29         return age;
30     }
31 
32     /*@Override
33     public int hashCode() {
34 //        return super.hashCode(); //默认
35         return 0; //此时可以实现让不同对象的哈希值相同
36     }*/
37 }

 

推荐阅读