hashcode()方法
1. hashCode()好比确定哪个放某个类的桶,而桶里可以放不止一个类
2. 方法返回映射到物理地址的值,如不设置,在创建类的时候,按类的类型产生和分配。机制:散列存储
3. hashCode()提高了Map里面的搜索效率:
如果hashCode()不同,则两个对象一定不相同
如果对象相同,hashCode()一定相同
4. Set因为需要唯一,每次添加的时候调用equals()方法。如果每次调用equals()方法效率过低。如果调用元素的hashCode()方法就能定位他应该放置的物理位置。如果已经有元素了,调用equals,如果没有直接放进去。
hashCode相等只能保证两个对象在一个HASH表里的同一条链上,但是否相等需要调用equals
5. 因为一般都是先调用hashCode(),相比为true之后才调用equals(),所以改写equals的时候总是要改写hashCode()
.
6. 使用HashCode()算法,防止内存泄露和溢出
如:若HashCode()方法依靠对象的成员变量值有关,放入一个Hash算法分配的Collection中,成员变量被修改后,HashCode值发生变化,调用remove(oldRefer),无法找到对应HashCode(存储是按原HashCode值存储的),则删除失败。导致内存泄露
7. hashCode约定:
如果equals方法做比较的信息没有被修改的话,则该对象多次调用hashCode(),必须返回同一整数
如果两个对象equals是相等的,则两个对象的hashCode方法必须产生相同的整数