s-day03--对象的哈希值
This commit is contained in:
@@ -0,0 +1,48 @@
|
|||||||
|
package com.inmind.set02;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
|
/*
|
||||||
|
1.什么是哈希值???
|
||||||
|
哈希值就是对象的特征码,使用十进制int来表示的,int是取值范围的,有限的,对象是无限。(不同的对象的哈希值可能相同的)
|
||||||
|
|
||||||
|
2.如何获取一个对象的哈希值???
|
||||||
|
int hashCode() 返回对象的哈希码值。
|
||||||
|
Object的hashCode源码:
|
||||||
|
public native int hashCode();//通过真正的地址值,使用哈希算法,返回的一个int值
|
||||||
|
|
||||||
|
3.我们发现每个对象的哈希值都是默认通过地址来获取,对于程序员来说没有意义,我们在实际开发中
|
||||||
|
希望拥有相同的内容的对象是同一个对象(哈希值要一样),所以我们子类重写hashCode方法,在判断
|
||||||
|
时使用到的哈希值要保持一致。
|
||||||
|
|
||||||
|
如何重写??学习一个最终类 String,得出String的哈希值跟它的内容有关,那么自定义的类重写
|
||||||
|
hashCode方法,那么也跟自己的属性有关,alt+insert
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
public class HashDemo07 {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Student s1 = new Student("刘备", 30);
|
||||||
|
Student s2 = new Student("刘备", 30);
|
||||||
|
System.out.println(s1);
|
||||||
|
System.out.println(s1.hashCode());
|
||||||
|
System.out.println(s2.hashCode());
|
||||||
|
|
||||||
|
|
||||||
|
String s3 = "通话";
|
||||||
|
String s4 = "重地";
|
||||||
|
String s5 = "abc";
|
||||||
|
String s6 = new String("abc");
|
||||||
|
System.out.println(s3.hashCode());
|
||||||
|
System.out.println(s4.hashCode());
|
||||||
|
System.out.println(s5.hashCode());
|
||||||
|
System.out.println(s6.hashCode());
|
||||||
|
|
||||||
|
HashSet<String> sets = new HashSet<>();
|
||||||
|
sets.add(s6);
|
||||||
|
sets.add(s5);
|
||||||
|
sets.add(s4);
|
||||||
|
sets.add(s3);
|
||||||
|
System.out.println(sets);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
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 && Objects.equals(name, student.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = Objects.hashCode(name);
|
||||||
|
result = 31 * result + age;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user