一次“面试翻车”后的思考:HashMap 和 ConcurrentHashMap 的区别到底在哪里?

嘿,大家好,我是小米,一个爱研究技术、也爱讲故事的 29 岁大哥哥。

上周我接了一个社招面试,面试官直接抛过来一个问题:“说说 Java 里的 HashMap 和 ConcurrentHashMap 有什么区别?”我心里一紧,心想这不是基础题嘛,结果我开口解释了半天,面试官的眼神却越来越微妙……嗯,这次面试翻车了。

所以,今天我决定好好梳理一下 HashMap 和 ConcurrentHashMap 的区别,希望我的教训能帮到大家!

开场故事:为什么需要 ConcurrentHashMap?

先想象一个场景:你和朋友们在餐厅点菜,每个人都可以随时往菜单里加菜。

问题来了:如果两个人同时修改菜单,服务员可能会拿到一份有问题的订单,比如一道菜被重复记录,或者有的菜根本没加上。

在单线程中,HashMap 这个"菜单"工作得很好。但到了多线程环境中,问题就来了:它本身不是线程安全的,多个线程同时操作会导致数据不一致。

于是,Java 提供了一个改进版的“菜单”——ConcurrentHashMap。不仅线程安全,还能保持一定的性能。

第一回合:结构上的对比

1. HashMap 的结构

HashMap 的底层是由数组和链表组成的,Java 8 以后为了提升性能,又在链表长度超过一定阈值时将链表转换为红黑树。

它的默认容量是 16,每次扩容时会翻倍到 32、64……以此类推。

<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

软件求生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值