Hashmap中的哈希冲突

时间:2011-09-26 22:08:34

标签: java

我需要一个简单的场景来在HashMap中产生散列冲突。有人可以提供一个。

如果我的hashmap键是不可变的,是否可能产生散列冲突?

此致

Raju komaturi

4 个答案:

答案 0 :(得分:4)

您可以创建自己的类型并创建错误的哈希函数:

public class BadHash {

    private String aString;

    public BadHash(String s) {
        aString = s;
    }

    public int hashCode() { 
        return aString.length();
    }

    public boolean equals(Object other) {
        // boilerplate stuff
        BadHash obj = (BadHash) other;
        return obj.aString.equals(aString);
    }
}

这样可以轻松创建碰撞。

一个例子是:

BadHash a = new BadHash("a", value1);
BadHash b = new BadHash("b", value2);
hashMap.add(a);
hashMap.add(b);

这两个条目会发生冲突,因为ab哈希值相同,即使它们不相等。

答案 1 :(得分:1)

假设您可以更改密钥类的哈希码方法。

public int hashCode() {
    return 1; // Or any constant value
}

这将使每一个键发生碰撞。

答案 2 :(得分:0)

不能比这简单得多:

Map<String, Object> map = new HashMap<String, Object>();
map.put("a", null);
map.put("a", null);

答案 3 :(得分:0)

最简单的方法是将HashMap的initialCapacity设置为较低的值并开始插入元素。

我想你也可以设计一个类,这样两个对象可以返回相同的hashCode值,即使equals会返回false。

从我所看到的情况来看,如果发生碰撞,默认的HashMap无法让告诉你。