
普歌-允异团队-HashMap面试题
发布日期:2021-05-08 03:42:12
浏览次数:17
分类:精选文章
本文共 874 字,大约阅读时间需要 2 分钟。
1.hashMap 工作原理
HashMap是基于hashing的原理,使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来储存Entry对象。
- HashMap是在bucket中储存键对象和值对象,作为Map.Entry。
key计算出一个hashcode,hashcode与“操作”计算出数组下标
在把put进来的key,value封装为一个entry对象 判断数组下标对应的位置,是不是空,如果是空则把entry直接存在该数组位置 如果该下标对应的位置不为空,则需要把entry插入到链表中 并且还需要判断该链表中是否存在相同的key,如果存在,则更新value 如果是JDK7,则使用头插法 如果是JDK8,则遍历链表,并且在遍历链表的过程中,统计当前链表的元素个数,如果超过8个,则先把链表转变为红黑树,并且把元素插入到红黑树中
2.HashMap在JDK7 ,JDK8 中的区别
- JDK8 通过数组+链表+红黑树来实现 使用了红黑树保证了插入和查询了效率,所以实际上JDK8中的Hash算法实现的复杂度降低了 数组扩容的条件也变化了,只会判断是否当前元素个数是否查过阈值,而不再判断当前put进来的元素对应的数组下标位置是否有值。
- JDK7 数组+链表实现 链表的插入是用的头插法,而JDK8中改为了尾插法 先扩容再添加新元素,JDK8 先添加新元素然后再扩容
3. DK8中链表转变为红黑树的条件?
链表中的元素的个数为8个或超过8个。满足当前数组的长度大于或等于64才会把链表转变为红黑树。
4 .链表转变为红黑树的目的
解决链表过长,导致查询和插入效率慢的问题
如果要解决这个问题,也可以通过数组扩容,把链表缩短也可以解决这个问题 在数组长度还不太长的情况,可以先通过数组扩容来解决链表过长的问题。
-
作者:麦克猫Cat
-
本文版权归作者和CSDN共有,欢迎交流
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月20日 01时02分38秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Stream 某些API
2019-03-15
IDEA如何设置打开多个文件时分行显示
2019-03-15
Face++
2019-03-15
1.RESTFUL
2019-03-15
关于项目中 对Java 的为空判断整理
2019-03-15
测试调用另一台电脑ip是否有用
2019-03-15
mos-excel集成文档
2019-03-15
2020-11-03日阅读自动内存管理机制
2019-03-15