1 回答

TA贡献11条经验 获得超10个赞
你好,纠正一下是hashCode()。
【什么是hash】
首先,需要明白hash是什么,hash是用来快速定位元素的一种数据结构,如给定一个变量我们可以通过hash 确定这个变量在内存中的位置 即 变量a 经过 hash(a)->就可以确定这个元素在内存中的位置。
下面是比较重要的信息:
【hashCode 方法的作用】
object基类 中 有hashcode(),这就导致了所有我们自建的类都继承了hashcode 方法。
hashcode在单一类当中只是一个实例方法并没有什么大的作用。
[hashcode 应用]
在Java集合类当中有实现map接口的HashMap、Set接口的HashSet 要知道set集合中存储的对象的引用所指向的对象是不能重复的,比如你要实现 Set<Student> students[] = new HashSet<>();那么 Student 这个类中必须override(重写)hashCode()与equals(), 如果不重写hashCode,只重写equals(),那么当你Student a = new Student("张晓",13);Student b = new Student("张晓",13); 这两个对象的引用都能被存储至hashset 集合当中,但其实我们肉眼观察到的对象已经重复了,这就是因为hashcode没有重写,两个对象的hash code不一致导致的肉眼观察到的相同内容的对象被存储至了set集合当中。
所以总结:
多个 单一类对象实例中,如果两个对象的hashCode() 相同 ,那么两个对象equals() 一定相同 因为是同一个对象,但equals相同 hashCode()不一定相同
在HashTable、HashSet、HashMap 集合中存储的对象,hashCode 与 equals 结合来确保元素的肉眼可见的非重复性。
添加回答
举报