Java集合 --- HashMap底层实现和原理

 
 

概述

文章的内容基于JDK1.7进行分析,之所以选用这个版本,是因为1.8的有些类做了改动,增加了阅读的难度,虽然是1.7,但是对于1.8做了重大改动的内容,文章也会进行说明。

HashMap基于Map接口实现,元素以键值对的方式存储,并且允许使用null 建和null值,因为key不允许重复,因此只能有一个键为null,另外HashMap不能保证放入元素的顺序,它是无序的,和放入的顺序并不能相同。HashMap是线程不安全的。

数据结构

HashMap底层数据存储结构.png
HashMap底层数据存储结构.png

JDK 1.8的 改变

在Jdk1.8中HashMap的实现方式做了一些改变,但是基本思想还是没有变得,只是在一些地方做了优化,下面来看一下这些改变的地方,数据结构的存储由数组+链表的方式,变化为数组+链表+红黑树的存储方式,在性能上进一步得到提升。

数据存储方式
java1.8 HashMap数据存储结构变化.png
java1.8 HashMap数据存储结构变化.png
总结

HashMap采用hash算法来决定Map中key的存储,并通过hash算法来增加集合的大小。

hash表里可以存储元素的位置称为桶,如果通过key计算hash值发生冲突时,

那么将采用链表的形式,来存储元素。

HashMap的扩容操作是一项很耗时的任务,所以如果能估算Map的容量,最好给它一个默认初始值,

避免进行多次扩容。HashMap的线程是不安全的,多线程环境中推荐是ConcurrentHashMap。

猜你喜欢

转载自blog.csdn.net/azhegps/article/details/78615339