Java笔记-hashCode()
hashcode相同时,而equals不相同,叫做hash冲突。
·官方想给每个对象一个唯一标识,即hashcode但目前任何hash算法都无法满足,数据量大时都会产生冲突。
·当两个对象的equals相同的时候,如果是字符串,那不用说都是从字符串常量池里面取得,也就是说同一个,这个时候他们的值是相同的,hashcode也是相同的,当我们自定义类对象时,也是一样的,因为重写了equals方法,所以判断他们的内容也就是每一个属性,也是一样的,两个对象相同的时候他们都是从常量池里取得同一份数据,所以相同。
·hashmap底层用hash表进行存储,即一个数组加若干链表,在调用put方法存数据的时候,hashmap会先计算它的键值的hashcode,然后根据hashcode计算出他在桶内的角标,这个桶值得就是数组的每个槽位,当遇到hashcode值相同的对象时候也就是产生hash冲突的时候,就放在同一个槽位里面形成链表,当链表的长度超过8时的时候就会转化为树,形成红黑树。也就是在这个链表或者是树上的数据他们的hashcode是相同的,但他们的值不一定是相同的,
比如:
·此时,这两个值得hashcode就是相同的,所以肯定是基于同一个槽位的,放在一个链表上。这就是当hashcode相同的时候,用equals判断对象,不一定相同。