我们可以在Java的哈希图中使用对象作为键吗?
如何将对象用作哈希映射中的键。如果使用对象作为键,是否需要覆盖该对象的等于和哈希编码方法?
如何将对象用作哈希映射中的键。如果使用对象作为键,是否需要覆盖该对象的等于和哈希编码方法?
一个简单的拇指法则是使用不可变对象作为 中的键。HashMap
因为:
如果它是可变的,则值或条件可能会更改,您将永远无法从 中检索密钥。hashcode()
equals()
HashMap
更准确地说,用于计算的类字段应该是不可变的!equals()
hashcode()
现在,假设您创建自己的类:
equals()
hashcode()
请记住,如果两个对象是 ,那么它们也应该相等!equal()
hashcode()
hashCode() -HashMap提供用于存储的put(key,value)和用于从HashMap检索值的get(key)方法。当 put() 方法用于存储 (Key, Value) 对时,HashMap 实现调用 Key 对象上的哈希码来计算哈希值,该哈希值用于查找将存储 Entry 对象的存储桶。当 get() 方法用于检索值时,再次使用键对象来计算哈希值,然后使用该哈希来查找存储该特定键的存储桶。
equals() - equals() 方法用于比较对象的相等性。在使用HashMap键对象进行比较的情况下,也使用equals()方法,Map知道如何处理散列冲突(散列冲突意味着多个键具有相同的散列值,从而分配给同一个桶。在这种情况下,对象存储在链表中,请参阅图以更清晰。其中 hashCode 方法有助于查找存储该密钥的存储桶,而 equals 方法有助于查找正确的密钥,因为单个存储桶中可能存储了多个键值对。