1.equal方法
object的equal方法比较的是两个对象的内存地址
2.hashcode方法
object的hashcode方法用的是jvm的哈希码取模运算得到的值,和内存位置有关
如果没有重写equals和hashcode方法,x。equals(y)==true,那么她们的内存地址相等,hashcode也相等。
为什么要重写equals和hashcode方法
集合要提高效率,而且要去重
如果一个长度为10的不重复数组要添加一个对象,那新增加对象需要和数组内所有元素进行equals比较,时间复杂度为n。如果用hashcode,先用hashcode对数组长度取余,就得出存放在数组中的位置,如果该位置没有元素则直接存入,有元素则和该位置的元素进行equals,相同则不存入,不同则放到别的位置,时间复杂度为1。
如果只重写hashcode
重写hashcode(一般是重写成他的属性或者别的去生成)为了让不同内存地址但是相同的对象比较得出相同结果。这时候hashcode相同了,但是equals比较的还是内存地址,所以还是会得出存入重复元素。
如果只有重写equals方法
重写equals方法也是为了让不同内存地址但是相同的对象比较得出相同结果。这时候hashcode不相同,但是equals比较的还是内存地址,所以还是会得出存入重复元素。