没有覆盖前的Object对象中equals方法比较的的确是内存地址值,假如说向hashSet集合中添加1000个元素,那么第1001个元素要添加的时候就要依次的和集合里面的1000个元素去equals比较,会大大降低效率,hash是一个人的名字,是他提出的哈希算法概念,也叫散列算法,具体算法是什么样的,我也不知道,java就是将数据通过哈希算法直接指定到一个内存地址上去,hashcode方法返回的并不是对象的物理存储地址,这样,向集合里添加元素时,调用hashCode方法直接就能定位到它应该放置的物理位置,如果这个位置上没有元素,就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存,不相同就散列其它的地址,这样就不用调用那么多次的equals方法了
java中规定:用equals方法比较两个对象是相同的,那么它们的hashcode方法返回的值也必须相同,两个对象的hashCode相同,它们并不一定相同 |