Java:hashcode与equals相关
Java中 == 在比较基础数据类型是判断值是否等,在判断引用类型时是判断实例地址。
而equals(),equals()客观上应该是对==的补充,我们可以在重写时加入自定义的相等判断的逻辑,比如String.equals(),当两个String引用指向同一实例或者两个不同实例但是内容一致时,都相等
再说哈希表,这个数据结构根据key值算出一个value值。
根据key算出value这个结果在Java中即为得到内存中的索引位置,而这个索引位置就是hashcode()
比如Java中的HashSet存储时,新加入的元素在hashcode()处已有存储,则出现冲突,这时实现原理上是使用equals对冲突处的所有元素判定,看新元素是否已在HashSet中。
所以对应于哈希表的设计初衷,
在Java中只要equals()的对象,其hashcode()应该是一样的(相同的key)
同理,不是equals()的对象也有可能hashcode()相同(不同的key可能得到相同的value)
因此,当我们重写了equals()时,也应确保hashcode()满足上面方框内的条件