##hashcode和equals
hashcode方法返回该对象的哈希码值。
hashCode是用来在散列存储结构中确定对象的存储地址的;
equals比较两个对象的内存地址是否相等
默认对象的hashcode方法返回值永远大于0
public boolean equals(object ob){
return (this==ob);
}//判断两个对象的地址是否相同
class H{
public native int hashCode(){//hashCode返回值是int
return 1;
}
}
H h1=new H();
H h2=new H();
System.out.println(h1.hashCode()==h2.hashCode());//true
System.out.println(h1.equals(h2));//fauls,内存地址不相同
1、hashCode和equals返回值应该是稳定的,不应有随机性
在hashmap中通过hashCode得到的值计算出在数组中的下标,每个下标对应一个链表或者是红黑数,然后用
equals方法对比每个结点的位置是否相同
2、默认对象的hashCode方法返回值永远大于等于0
while(ture){
object o=new object();
if(o.hashCode()<0){
System.out.println(o.hashCode());
}
}//没有输出,因为hashCode方法默认永远大于0
3、默认对象的hashCode方法返回值不是对象的地址
###为什么要重写equals
equals是比较两个对象地址是否相同的方法,如果比较的是两个自定义的对象的地址,那么返回值一定是false没有意义
如果要判断两个自定义的对象地址是否相等就必须重写equals
###为什么要重写hashCode
如果没有重写hashCode默认就会调用Object中的hashCode对比两个对象的引用地址,结果就是false
##总结
hashCode和equals两个方法是用来协同判断两个对象是否相等的,采用这种方式的优点是可以提高程序插入
和查询的速度



