HashMap的实现原理

(1) HashMap的概述

HashMap是基于哈希表的Map接口的非同步(非线程安全)实现,允许使用null值和null键,此类不保证映射的顺序。

(2) HashMap的数据结构

HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。

HashMap的底层就是一个数组结构,数组中的每一项又是一个链表

(3) HashMap的存取实现

存储(put): 当往HashMap中put元素的时候,先根据key的HashCode重新计算hash值,根据这个hash值得到这个元素在数组中的下标,如果该位置已经有其他元素,那么该位置的元素将已链表的形式存放,新加的放在链头。如果没有元素,就直接将该元素放在此位置。

获取(get): HashMap中get元素时,首先计算key的hashCode,找到数组中对应位置的某一元素,然后通过key的equals方法在对应位置的链表中找到需要的元素。

总结:

HashMap在底层将Key-value当成一个整体进行处理,这个整体就是一个Entry对象。

HashMap底层采用一个Entry[]数组来保存所有的Key-value

对,当需要存储一个Entry对象时,会根据 hash算法来决定其在数组中的存储位置,再根据 equals方法决定其在数组位置上链表中的存储位置,当需要取出一个Entry对象时,先根据hash算法找到其在数组中的存储位置,再根据equals方法从该位置上的链表中取出该对象。

你可能感兴趣的