没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
模拟面试之HashMap ...\ 1.HashMap的底层数据结构是什么? 追问:为什么在1.8中增加红黑树? 追问:链表过深问题为什么不用二叉查找树代替,而选择红黑树?为什么不一直使用红黑树? 追问:讲一下你对红黑树的认识 2.讲一下HashMap的工作原理,put()和get()的过程分别是怎么样的? 追问:说一下数组是怎么扩容的? 追问:扩容是需要重新对数据进行hash吗 追问:在插入元素的时候,JDK1.7与JDK1.8有什么不同? 3.你说JDK1.8之前使用头插法将Entry节点插入链表,那么头插法具体是怎么做的?设计头插法的目的是什么? 4.之前是头插法,为什么JDK1.8之后要改成尾插法? 5.HashMap是怎么设定初始化容量大小的? 追问:为什么HashMap的数组长度要取2的整数幂? 6.讲一下HashMap中的哈希函数时怎么实现的? 追问:哈希函数为什么这么设计? 7.HashMap是线程安全的吗? 追问:如何解决这个线程不安全的问题? 追问:分别讲一下这几种Map都是如何实现线程安全的? 8.说一下HashMap在JDK1.8中都有哪些改变? 9.HashM
资源推荐
资源详情
资源评论
# 模拟面试之 HashMap
>所有题必须很熟,这个点基本是必问,需要好好看看源码
## ...\
### 1.HashMap 的底层数据结构是什么?
底层数据结构是哈希表结构(链表散列:数组+单向链表),结合了数组和链表的优点,当链
表长度超过 8 时,链表会转为红黑树。数组中的每一个元素都是链表。总结来说就是 HashMap
在 JDK1.8 之前底层是由数组+链表实现的,在 JDK1.8 开始底层是由数组+链表或者数组+红黑
树实现的。
### 追问:为什么在 1.8 中增加红黑树?
当需要查找某个元素的时候,线性探索是最直白的方式,它会把所有数据遍历一遍直到找到
你所查找的数据,对于数组和链表这种线性结构来说,当链表长度过长(数据有成百上千)
的时候,会造成链表过深的问题,这种查找方式效率极低,时间复杂度是 O(n)。简单来说红
黑树的出现就是为了提高数据检索的速度。
### 追问:链表过深问题为什么不用二叉查找树代替,而选择红黑树?为什么不一直使用红
黑树?
二叉树在特殊情况下会变成一条线性结构,这就跟原来的链表结构一样了,选择红黑树就是
为了解决二叉树的缺陷。
红黑树在插入数据的时候需要通过左旋、右旋、变色这些操作来保持平衡,为了保持这种平
衡是需要付出代价的。当链表很短的时候,没必要使用红黑树,否则会导致效率更低,当链
表很长的时候,使用红黑树,保持平衡的操作所消耗的资源要远小于遍历链表锁消耗的效率,
所以才会设定一个阈值,去判断什么时候使用链表,什么时候使用红黑树。
### 追问:讲一下你对红黑树的认识
每个节点非红即黑
根节点总是黑色的
如果节点是红色,则它的子节点必须是黑色(反之不一定)
每个叶子节点都是黑色的空节点
从根节点到叶子节点或者空节点的每条路径必须包含相同数量的黑色节点(黑色节点的深度
相同)
### 2.讲一下 HashMap 的工作原理,put()和 get()的过程分别是怎么样的?
**存储对象时,将 key 和 vaule 传给 put()方法:**
资源评论
飞翔的佩奇
- 粉丝: 6123
- 资源: 1603
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功