HashMap底层原理

更多Java基础相关知识点详见个人主页【Java基础相关】专栏

HashMap原理

HashMap的底层数据结构实现,包括什么条件下Node数组转为单链表,什么条件下单链表转为红黑树,什么条件下红黑树退化为单链表

HashMap的底层数据结构:node数组,单链表,红黑树

为提高搜索效率减少搜索时间,当链表中元素大于等于8时,链表转为红黑树

为减少内存占用和提高插入和删除的效率,当红黑树中元素数量小于等于6,红黑树转为链表

哈希冲突现象以及哈希冲突的解决方案(至少三种)

哈希冲突:当两个不同的元素通过哈希函数映射到哈希表中同一个数组下标时,就会发生哈希冲突

解决方案①:链地址法,也是HashMap中采取的方法

在每一个数组元素处,下挂一个链表,该链表内所有元素的哈希值都相同

解决方案②:开放寻址法(包括线性探测法,二次探测法)

线性探测法:从冲突处往后寻找到第一个没有被占用的单元格,走到最后一个单元时,再从第一个单元开始探测

二次探测法:也叫平方探测法,给发生冲突的单元下标加上1,4,9等,判断单元格是否为空,直到找到空闲单元格

解决方案③:再哈希法

同时构造多个不同的哈希函数,等发生哈希冲突时使用其他的哈希函数计算地址

为什么使用红黑树而不使用二叉树

红黑树有自平衡的特性,能够保证最坏情况下的时间复杂度为O(log n),

二叉树不具备自平衡功能,在极端情况下可能会退化成单链表

HashMap的 put() 方法是不是线程安全的,如果想要线程安全,需要改成什么类

HashMap的 put() 方法不是线程安全的,当有多个线程同时进行put操作时,可能导致数据不一致

为保证线程安全,可以使用ConcurrentHashMap类,它可以保证线程安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值