1.什么是HashMap
HashMap是一个散列表,用来存放键值对(key-value)映射。
HashMap实现了map接口,根据存放键值(key)的Hashcode来存储数据,具有较快的读取速度。
由于实现了map接口,所以HashMap里面每一个key都有一个value与之对应,key是独一无二的不可重复。value可以重复。
需要注意的是HashMap里面的元素实际上是对象,所以在创建的时候不能直接写key和value的数据类型而是要写它们的包装类。
2.HashMap的数据结构
HashMap采用数组加链表的结构进行数据存储如下图所示
首先对要存入的key计算Hashcode,所得出的Hashcode对数组长度取模,可以得到在数组上的存储位置。但是实际中会存在两个不同的key的Hashcode对数组长度取模相同的情况,这种情况就需要用到链表。如图所示数组的每一个单元存储的是一条链表,这样我们只需要把取模相同的key存入链表就可以了。因为使用了数组加链表的数据结构,所以HashMap的读取可以实现叫较高性能。当然当HashMap存入的数据越多,数组上空的区域也就越少,发生取模相同的次数也就越多,那么链表也会越来越长,这样HashMap的读取性能就会发生下降。这种情况下HashMap会自动扩容,并且当链表长度大于8时会将链表转为红黑树进行存储。其中扩容行为发生时数组长度会变为原来的两倍,并且将就数组上的内容按照新数组的长度重新分配位置并存入新数组。下面这张图可以很好的解释HashMap的存储原理。