hashMap中put的实现原理
1、什么是hashMap?
既然说到hashMap那首先就应该要知道Map是个什么东西,map就是用于存储键值对(<key,value>)的集合,它是一个接口,hashMap就是基于hash算法实现map接口的一个集合类。
2、put实现原理
调用Put方法的时候发生了什么呢?
比如调用 map.put(“key1”, “value1”) ,插入一个Key为“key1"的元素。这时候我们需要利用一个哈希函数来确定这个键值对的插入下标(index),如计算出来这个下标为3,那么结果如下图:
也就是插入的数据是没有规律的,下面是我做的一个测试:
但是当插入的键值对较多时,肯定避免不了下标重复,也就是所谓的hash冲突,这个时候怎么解决呢?
从上图可以看到hashmap中有个next属性,当下标重复这个时候采用了链表式,当然我们还可以修改hashMap中的负载因子来降低hash冲突,当然说到使用链表肯定存在查询速度的影响,相对而言,使用链表式查询是比较慢的,当这样的链超过8后会转成红黑树结构。