两个不相等的对象,是有可能拥有相同的hashcode的,这种情况被称为“哈希碰撞”。
如下所示:
public class HashCodeExample { public static void main(String[] args) { String str1 = "FB"; String str2 = "Ea"; System.out.println("str1.hashCode(): " + str1.hashCode()); System.out.println("str2.hashCode(): " + str2.hashCode()); System.out.println("str1.equals(str2): " + str1.equals(str2)); } }
运行结果为:
str1.hashCode(): 2236 str2.hashCode(): 2236 str1.equals(str2): false
在这个例子中,尽管字符串 “FB” 和 “Ea” 不相等(equals()
返回 false
),但它们的哈希码却是相同的(都为2236)。
在哈希表数据结构(如 HashMap
、HashSet
)中,哈希碰撞是通过以下方式处理的:
1、链地址法
每个哈希桶存储一个链表或其它结构的所有元素,在发生碰撞时,将新元素添加到桶内的链表中。
2、开放地址法
在碰撞时,寻找其他空闲的桶来存储元素,这通常通过线性探测、二次探测或双重哈希等方式实现。
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

后台回复【架构】即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》