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