大家都知道hashmap的存储结构是键值对的形式如hashmap<key,value>的形式,那么它的底层数据结构是什么样子呢?
hashmap在jdk1.7之前hashmap的底层结构是数组跟链表,而在jdk1.8之后增加了许多的新特性其中就有红黑树、Lambda表达式、Stream等。在Jdk1.7时hashmap在put元素时先通过key的hashcode方法计算hash值然后通过%(数组的长度-1)来计算key在数组中的位置,当这个位置已经有元素时就添加到数组对应链表的头部,最先加入的在最后。具体如图
这种数据结构存在一个问题就是当改变数组长度是就需要重新计算hash值这明显是不好的,而且当数据量很大时查询效率就会变得很低,为了解决这个问题在jdk1.8之后引入了红黑树的概念,就是如果链表的长度超过了8之后就会保存进红黑树(效率接近于平衡二叉树)