重写equals为什么一定要重写Hashcode?
因为String.equals源码中,一种是比较两个对象的地址值是否相等,相等返回true,一种是比较值是否相等,相等返回true。而Hashcode是jvm根据内存地址随机生成,如果只重写equals不重写hashcode,会导致相同的数据对象,拥有不同的hashcode值,这会使得在使用Hashmap,HashTable等数据结构时,出现不可预估的错误。
Hashcode是可以对bucket做模运算,从而快速定位某个数据对象的位置。当使用某些集合框架的数据结构去定位某个元素时,除了迭代器与随机访问方法(基于链表的数据结构不存在真实的随机访问),HashCode是一种很高效率的方法。