HashMap八股文朗朗上口

首页 站内投稿 散文 正文

@Coder 原创 站内投稿 2023-06-14 12:47:22

简介 HashMap对于JAVA开发者是经常会用到的MAP集合


HashMap是Java中常用的散列表,用于存储键值对,其底层原理涉及到散列表、哈希函数等概念。

在Java中,HashMap类是基于数组(Entry[] table)和单向链表实现的。它通过哈希函数将键值散列为一个整数值,根据这个整数值来确定该键值对在数组中的存储位置,称为槽。然后将键值对存储在对应的槽中,如果槽中已存在该键值对,则以单向链表形式将其连接到已存在的键值对后。

在Java 8中,HashMap的实现又加入了红黑树的功能,当链表长度超过8时,链表将会自动转化为红黑树。

下面是HashMap实现的一般流程:

  1. 计算哈希值(hashCode):对于要存储的键值对,首先会根据键值对的键计算出该键的哈希值。

  2. 计算数组存储位置:通过哈希函数等算法计算哈希值对应的数组下标位置,这个位置在数组中称为槽。

  3. 添加键值对:将键值对添加到计算出的数组位置上,如果该位置已经存在键值对,则进行单向链表或红黑树的连接。

  4. 查找键值对:查找时根据键再次计算哈希值,并确定存储位置,然后遍历链表或红黑树查找对应的值。

  5. 删除键值对:同样通过计算哈希值,确定键值对在数组中的位置,然后通过遍历链表或红黑树定位到该键值对,并删除。

需要注意的是,当哈希冲突时,即两个键的哈希值相同时,会在链表或红黑树的头端插入新的键值对,这里的冲突是指在哈希值散列后,多个键对应到了数组的同一个位置。

总的来说,HashMap的底层实现是非常复杂的,但是因为其能够提供快速的查找和添加、删除操作,因此在Java开发中被广泛应用。


Tags:


本篇评论 —— 揽流光,涤眉霜,清露烈酒一口话苍茫。


    声明:参照站内规则,不文明言论将会删除,谢谢合作。


      最新评论




ABOUT ME

Blogger:袅袅牧童 | Arkin

Ido:PHP攻城狮

WeChat:nnmutong

Email:nnmutong@icloud.com

标签云