更多Java基础相关知识点详见个人主页【Java基础相关】专栏
HashMap原理
HashMap的底层数据结构实现,包括什么条件下Node数组转为单链表,什么条件下单链表转为红黑树,什么条件下红黑树退化为单链表
HashMap的底层数据结构:node数组,单链表,红黑树
为提高搜索效率减少搜索时间,当链表中元素大于等于8时,链表转为红黑树
为减少内存占用和提高插入和删除的效率,当红黑树中元素数量小于等于6,红黑树转为链表
哈希冲突现象以及哈希冲突的解决方案(至少三种)
哈希冲突:当两个不同的元素通过哈希函数映射到哈希表中同一个数组下标时,就会发生哈希冲突
解决方案①:链地址法,也是HashMap中采取的方法
在每一个数组元素处,下挂一个链表,该链表内所有元素的哈希值都相同
解决方案②:开放寻址法(包括线性探测法,二次探测法)
线性探测法:从冲突处往后寻找到第一个没有被占用的单元格,走到最后一个单元时,再从第一个单元开始探测
二次探测法:也叫平方探测法,给发生冲突的单元下标加上1,4,9等,判断单元格是否为空,直到找到空闲单元格
解决方案③:再哈希法
同时构造多个不同的哈希函数,等发生哈希冲突时使用其他的哈希函数计算地址
为什么使用红黑树而不使用二叉树
红黑树有自平衡的特性,能够保证最坏情况下的时间复杂度为O(log n),
二叉树不具备自平衡功能,在极端情况下可能会退化成单链表
HashMap的 put() 方法是不是线程安全的,如果想要线程安全,需要改成什么类
HashMap的 put() 方法不是线程安全的,当有多个线程同时进行put操作时,可能导致数据不一致
为保证线程安全,可以使用ConcurrentHashMap类,它可以保证线程安全
25万+

被折叠的 条评论
为什么被折叠?



