大家好,这是我的第一篇技术博客,为什么我突然想写技术博客呢?并不是心血来潮写的,而是在一年跌跌撞撞的代码之路中忽然明白一个道理,只有写出来,讲出来才是自己的东西,这也是为了以后我自己复习起来可以用,第一篇技术博客,写得不好,而且有点啰嗦,大家见谅!HasMap好久之前就学习过了,可是一直没有去看她的源码,今天看了他的源码之后才肃然起敬!首先什么是哈希表,哈希表就是(数组+链表)在jdk1.8之后还加上了红黑树的实现。 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;这个是数组初始长度大家都是知道的,可是为什么不直接写16呢?因为16是给我们人看的,计算机看不懂,而位运算是最快速的运算,所以为了性能更好才这样写的。static final float DEFAULT_LOAD_FACTOR = 0.75f;然后这个是什么呢?这个是加载因子,就是元素占了数组的75%的时候就需要来动态扩充数组扩充的算法是:数组<<1,相当于乘以2.但是对于扩充有一个问题:数组的动态扩充会带来hash值的重新计算,所以如果动态的扩充太多次就会影响性能,我们开发的时候需要考虑到中国问题。那么hasmap是如何把对象存到数组中的呢?是把key对象通过hash()方法计算hash值,然后用这个hash值对数组长度取余来决定该key对象,当在一个数组的位置有多个对象时,改用链表的形式存储,当链表长度大于8是改用红黑树存储,也就是我们所说的平衡二叉树,这是在jdk1.8之后所采取的措施,这样做的目的是为了取值更快,当数组的存储量达到一定的量级的时候性能会更加明显。基本上我所理解的就在这里,如果有错麻烦告知,让我在错误中进步。谢谢观看
一个技术小白对于HashMap的理解
最新推荐文章于 2024-04-20 23:07:40 发布