HashMap Java示例避免冲突

我在java中使用HashMap来存储键和Object 。 我读到了关于hashmap的冲突,我试图通过使用链表来避免它。

我在网上做了一些搜索,但是我找不到一个如何做到这一点的例子。

有人可以指向我使用链表实现hashmap的在线资源吗?

Java HashMap已经以这种方式为您处理冲突。 您需要做的就是确保覆盖并实现密钥的hashCode()equals()方法。

每个hash code都将映射到特定的“桶”。 每个桶包含一个用于冲突情况的链表。

避免(或者说最小化 )冲突的唯一方法是创建一个哈希函数,在整个HashMap中创建最佳的值分布。 根据HashMap的密度和hash code的质量,冲突几乎是不可避免的,因此需要覆盖这两种方法。

编辑 :OP问了一个例子

要覆盖这两种方法:

 public class MyObject { String var1; int var2; //... public boolean equals(Object obj) { if(obj == null) return false; if(this == obj) return true; // Reference equality if(!(obj instanceof MyObject)) return false; MyObject myObj = MyObject(obj); return (var1.equals(myObj.var1)) && (var2 == myObj.var2); } public int hashCode { return var1.hashCode() ^ var2; } } 

如果您使用相同的object作为键,或者使用不同的object作为具有相同哈希码的键,则仅发生冲突。

如果要按键存储多个对象,则应创建列表的HashMap

这是一个简单的例子:

 HashMap> map = new HashMap>(); map.put(key, new LinkedList); map.get(key).add(object);