Java中为什么重写equals方法必须重写hashcode方法?

201 阅读1分钟

当我们使用的类不涉及到散列表的数据结构时,此时equals方法和hashcode方法没有必然联系,即equals方法比较两个对象值是否相等时,和hashcode方法无关。但当我们使用散列表的数据结构时,重写equals方法必须重写hashcode方法,其中Java中涉及到的散列表数据结构的实现类有HashSet、HashMap、HashTable等。因为散列表结构,通过hash值来确定元素的索引位置,如果没有重写hashcode方法,那么如果两个对象相等,继承自Object类中原生的hashcode方法返回的是与对象内存地址相关的hash值,无法保证两个对象相等,hash值一定相同,导致插入操作时相同的两个对象会插入不同的位置,将两个相同的对象视作不相等。