Java HashMap的机制

时间:2014-05-20 13:49:20

标签: java hashmap hashcode

  1. 阅读Algorithms书,需要掌握哈希表的概念。他们用单独的链接和散列进行线性探测来描述散列。我猜Java的HashMap是一个哈希表,因此我想知道HashMap使用什么机制(链接或探测)?

  2. 我需要用get,put,remove实现最简单的HashMap。你能指出我阅读的好材料吗?

  3. 当用于Map的唯一键是自定义对象时,我们需要在相应的类型中实现hashCode()函数。我是否正确或者何时需要hashCode()?

  4. 不幸的是,这本书没有回答所有问题,尽管我理解对于你们中的许多人来说这些问题都很低。

3 个答案:

答案 0 :(得分:1)

1:在java 1.8 HashMap使用链接列表单独链接来解决冲突之前。每个桶都有一个链表。

2:hmmmmmm可能this一个?

3:是的,你是对的,hashCode()用于计算密钥的哈希值。然后,哈希码将被转换为0到桶数之间的数字 - 1。

答案 1 :(得分:1)

对于我们很多人来说,这是一个最令人困惑的问题。但它并不复杂。


我们知道

  • HashMap在Map.Entry中存储键值对(我们都知道)

  • HashMap适用于散列算法,并在put()和get()方法中使用 hashCode()和equals()方法。(即使我们知道这一点)

  • When we call put method by passing key-value pair, HashMap uses Key **hashCode()** with hashing to **find out the index** to store the key-value pair. (this is important)

  • The Entry is **stored in the LinkedList**, so if there are already existing entry, it uses **equals() method to check if the passed key already exists** (even this is important)

  • 如果是,则覆盖值否则会创建新条目并存储此键值条目。

  • 当我们通过传递获取方法时,它再次使用 hashCode()在数组中找到索引,然后使用 equals ()方法找到正确的条目并返回它的值。 (现在很明显)

此图片将帮助您理解:

enter image description here

答案 2 :(得分:0)

HashMap的工作原理是Hashing。它的工作有两个方面。

首先,它维护一个链接列表来存储具有相似值的对象,这意味着它们等于"。

其次它有一个这些链表的集合,其标题存在于数组中。

有关更多信息,请参阅博客Java Collection Internal Working