有没有可能两个不相等的对象有相同的hashcode?

两个不相等的对象,是有可能拥有相同的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)。

在哈希表数据结构(如 HashMapHashSet)中,哈希碰撞是通过以下方式处理的:

1、链地址法

每个哈希桶存储一个链表或其它结构的所有元素,在发生碰撞时,将新元素添加到桶内的链表中。

2、开放地址法

在碰撞时,寻找其他空闲的桶来存储元素,这通常通过线性探测、二次探测或双重哈希等方式实现。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

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

评论交流
    说说你的看法