java8 HashMap的变化

本文介绍了Java 8中HashMap的变化,主要关注树形桶的引入以及Hash表实现的改进。Java 8采用红黑树处理冲突,当链表长度超过阈值时转换为树形结构,提升查找效率。此外,文章还分析了Java 7与Java 8在扩容策略上的不同,以及多线程环境下可能导致的问题。
摘要由CSDN通过智能技术生成

在java容器中map是我们经常会用到的一种容器。而map中HashMap是我们最长用的map之一,而且在java面试中考察容器时HashMap的实现也基本是必考之一。并且我们常常会听到考察HashMap时会问到是否是线程安全?为什么HashMap在多线程并发的时候可能造成CPU利用率变成100%?在解析HashMap的这些文章的中,都是基于Java 8之前的的实现来讲解的。那么Java 8与Java 8之前的HashMap有什么变化呢,这一篇文件会讲解一下Java 8 HashMap的关键变化。

树形桶

在对比java 8与java 7的HashMap源码实现部分。可以发现Java8的源码中静态变量多了几个:

    static final int TREEIFY_THRESHOLD = 8;
    static final int UNTREEIFY_THRESHOLD = 6;
    static final int MIN_TREEIFY_CAPACITY = 64;

从这些变量的命名中可以看出都与tree(树)有关。那么这些变量是做什么用的,为什么与树有关呢。这就是在java8中的一个变化。如果有很多Entry都属于一个桶,原来的java7的实现是使用一个双向列表,属于一个桶的Entry都是连接在一起,那么在桶中查找对应的Entry时查找时间是线性的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值