HashMap原理

HashMap原理

HashMap基本是每一个面试官都不愿意放过的内容了。这是Java中的热点面试问题,也是很经典的面试热点。

如果能对HashMap有一定的了解,可以更好的帮助你去理解学习相关问题,也能更好的处理业务问题,同时也能让你在面试中和面试官有更好的谈资。你掌握的多少就是决定你和面试官的谈资空间有多大。

1、Java1.8前后的HashMap有什么区别?

在JDK1.2就引入了HashMap,我们都知道在Java1.8中引入了很多的新特性(比如Lambda表达式等),但是在此之后,它的数据存储结构发生了一些变化(优化)。

**在1.8之前是使用数组+链表的方式进行数据存储。**当数据量变大的时候,在访问速度上会有很大的效率影响,所以在1.8之后,如果当链表长度>64并且链表>8的时候就会转化成红黑树的方式进行存储。

在1.8之后是使用数组+链表+红黑树的方式进行数据存储。

2、HashMap的特点

Key可以为Null,不允许重复,线程不安全。

3、HashMap的扩容机制。

HashMap中默认的长度是16,负载因子是0.75。

当HashMap中元素个数超过 默认长度*负载因子 时,就创建一个大小为前一次两倍的新数组,再讲原来数组中的数据复制到新数组中。当数组长度达到64且链表长度大于8时,就会转化成红黑树。

(源码)默认长度:

在这里插入图片描述

(源码)负载因子:

(源码)当满足条件就转换成链表+红黑树:
在这里插入图片描述

在这里插入图片描述

(源码)扩容复制:
扩容方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pika_农夫三拳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值