Java HashMap的机制

  • 阅读算法书,需要掌握哈希表的概念。 他们使用单独的链接编写散列并使用线性探测进行哈希处理。 我猜Java的HashMap是一个哈希表,因此我想知道HashMap使用什么机制(链接或探测)?

  • 我需要通过get,put,remove来实现最简单的HashMap。 你能指出我的好材料来阅读吗?

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

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


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

    2:嗯,也许这一个?

    3:是的,你是对的, hashCode()用来计算密钥的散列。 然后哈希码将被转换为0和桶数-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)

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

  • 当我们通过传递Key来调用get方法时 ,它再次使用hashCode()来查找数组中的索引 ,然后使用equals()方法来查找正确的Entry并返回它的值。 (现在这很明显)

  • 这张图将帮助你理解:

    在这里输入图像描述


    HashMap的工作原理是哈希。 它的工作是两倍。

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

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

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

    链接地址: http://www.djcxy.com/p/91915.html

    上一篇: Mechanism of Java HashMap

    下一篇: What is the difference between the HashMap and Map objects in Java?