package hash_map.hash;
import java.util.HashMap;
public class TestOne {
public static void main(String[] args) {
//1.哈希值
//数据比较时,如果数据量比较大,equal就慢,引入哈希值
//hashCode() 值: JVM根据对象的内存地址和其他信息生成一个整型数据
// 2.hashCode 和equqal
//两个对象先比较哈希值,如果相等,再通过equal比较结果是true才是真的相等
//如果两个对象的hashCode相等,equal得到的结果不一定是true,哈希冲突
//3.重写equal方法的时候一定要重写hashCode方法
//如果不重写hashCode方法,hashCode不同,保存到hashmap中出返回null
//4.如果字段值为易变数据最好不要依赖这个字段
//
//
User t1 = new User("jack",1);
User t2 = new User("jack",1);
System.out.println(t1.hashCode());
System.out.println(t2.hashCode());
System.out.println(t1.equals(t2));
HashMap<User, Integer> map = new HashMap<User, Integer>();
map.put(t1, 1);
System.out.println(map.get(t2));
}
}
package hash_map.hash;
public class User {
private String name;
private int age;
private String guding = "66";
public User(String name, int age) {
super();
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 obj) {
return this.name.equals(((User)obj).name) && this.age == ((User)obj).age ;
}
@Override
public int hashCode() {
return this.guding.hashCode()*7;
}
}