进阶day03-对象的哈希值(hashCode())
This commit is contained in:
37
javaSE-day03/src/com/inmind/set02/HashDemo08.java
Normal file
37
javaSE-day03/src/com/inmind/set02/HashDemo08.java
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package com.inmind.set02;
|
||||||
|
/*
|
||||||
|
1.什么是哈希值??
|
||||||
|
哈希值就是一个对象的特征码,使用一个十进制int值来表示的.int的值是有限的,但是对象是无限的(不同的对象的哈希值可能相同)
|
||||||
|
注意:不同的对象的哈希值可能相同!!!
|
||||||
|
|
||||||
|
2.如何获取一个对象的哈希值呢??
|
||||||
|
Object类中有一个方法hashCode方法可以获取
|
||||||
|
int hashCode() 返回对象的哈希码值。
|
||||||
|
|
||||||
|
Object类的hashCode的源码:
|
||||||
|
public native int hashCode();//通过真正的地址值使用哈希算法返回的一个int值
|
||||||
|
|
||||||
|
3.我们发现每个对象的哈希值默认是通过地址来获取,这样没有意义.我们在实际开发中
|
||||||
|
希望拥有相同内容的同一类对象的哈希值的一致.所以子类重写hashcode.我们可以模拟一个
|
||||||
|
已经重写过hashcode,并且经常使用的类.得出一个结论,String的哈希值跟它的内容有关,那么
|
||||||
|
自定义类自动重写hashcode那么也应该跟类的内容(属性)有关
|
||||||
|
|
||||||
|
*/
|
||||||
|
public class HashDemo08 {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
//创建2个内容相同的学生对象
|
||||||
|
Student s1 = new Student("刘备", 18);
|
||||||
|
Student s2 = new Student("刘备", 18);
|
||||||
|
//获取2个对象的哈希值
|
||||||
|
int hash = s1.hashCode();
|
||||||
|
System.out.println(hash);
|
||||||
|
System.out.println(s1);
|
||||||
|
System.out.println(s2.hashCode());
|
||||||
|
|
||||||
|
String str1 = "abc";
|
||||||
|
String str2 = new String("abc");
|
||||||
|
|
||||||
|
System.out.println(str1.hashCode());
|
||||||
|
System.out.println(str2.hashCode());
|
||||||
|
}
|
||||||
|
}
|
||||||
29
javaSE-day03/src/com/inmind/set02/Student.java
Normal file
29
javaSE-day03/src/com/inmind/set02/Student.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package com.inmind.set02;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class Student {
|
||||||
|
String name;
|
||||||
|
int age;
|
||||||
|
|
||||||
|
public Student(String name, int age) {
|
||||||
|
this.name = name;
|
||||||
|
this.age = age;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
|
Student student = (Student) o;
|
||||||
|
return age == student.age && name.equals(student.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = name.hashCode();
|
||||||
|
result = 31 * result + age;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user