课程介绍
课程目录
用户评论
课程介绍
课程目录
用户评论

你将获得

  • HashMap 基本结构
  • HashMap 源码解析
  • 红黑树、二叉树与平衡二叉树
  • 2-3 树

教学服务

  • 名师授课,不走弯路
  • 高质量技术交流群,圈内大佬云集

讲师介绍

老师头像

高杰

Kotlin 专家、谷歌开发者社区讲师
Kotlin 专家,HenCoder 及码上开学成员之一,受邀担任谷歌开发者社区讲师。拥有丰富的 Android 开发经验,擅长 Android 组件化开发及性能优化,对布局优化、过度绘制、内存泄露等有比较深入的研究。具备丰富的大型互联网金融项目架构设计经验。

课程详情

大家都在问

想了解高级开发课

294人在问去咨询

想了解Compose

294人在问去咨询

怎么加入技术交流群?

294人在问去咨询

知识星球是什么?

294人在问去咨询

HashMap 基本结构介绍 - 高杰视频文稿

这节课呢,是所有人都会用并且肯定用的非常熟练的hash map,那我用的非常熟练了,我还学它干嘛,最初会有这节课的原因可以说是出于无奈,因为很多人都在面试中遇到过这个hash map的问题,我能够理解很多面试都喜欢问hash map,因为这是一种非常经典的数据结构,了解他也许可以帮助我们在特殊的场景下选择hash map,还是安卓特有的every map或者SPA Sherry,事实上,Hash map的绝大多数面试内容对实际开发并没有帮助,而专门去准备hash map面试题的人往往能够得到额外的收益,但这并不代表没有专门去看过他的人能力就差,同时很黑色幽默的是,当初准备过这些面试题的人作为面试官的时候也选他来考察别人,这节课在我们课程中出现实际上是让我们的,学员获得了不公平的收益,加剧了不公平的表现,这不符合我们的价值观,当然我们应该一开始就认识到这一点,作为弥补,现在会把它作为一节试听课,目的是希望大家作为面试者遇到这类问题的时候能够不被减分,减少这种实际上不公平的现象,其次,倡议大家作为面试官的时候能够删减掉这类问题,这真的不是一个好的考察点,现在回到课程那些hash map的问题,就比如说说一下Java中集合类的数据结构是怎么样的,让我们快速的回顾一下常见的Java集合类的数据结构,L list内部是数组,Linked list内部是列表,尔数组和列表正好是两种最基本的数据结构,我们稍微回顾一下两者的特点,速度的特点就是它在内存中是一块连续的区域,正因为数据都存放在一块连续的区域中,这样一来等于知道了每一个数据的内存地址,ER列表特点就是不需要一块连续的内存空间,你可以存放在任何地方,每个数据都保存了下一个数据的内存地址,这样一来就可以通过记录的地址找到下一个节点的数据,数组呢,因为知道每个数据的内存地址,所以支持随机访问,解释下什么是随机访问,随机访问是相对于顺序访问的,顺序访问是需要从第一个数据开始依次访问尔素组,你不管是访问中间的还是访问最后的,因为可以直接通过索引直接就能获取到数据,效率非常高,但是也正是因为数组需要在内存中是一块连续的区域,所以使用速度的时候需要提前申请一块连续的内存空间,这样一来就有可能导致内存浪费,同时插入数据的时候需要将插入位置后的所有数据整体的往后移动,删除数据的时候呢,需要将删除位置后面的所有数据整体往前移动的,增三的效率就很差,总结一下就是数组可能浪费内存空间,查找效率快,但是,插入删除的效率差尔列表呢,列表不需要连续的内存空间,只是在相邻的节点进入了地址,所以插入和删除的时候只需要修改对应节点的地址就可以了,其他的节点呢,是不需要进行改动的,但是列表就只能支持顺序访问啦,访问某个数据的时候都必须从第一个节点开始,然后一个一个节点的寻找,总结一下就是,列表不会浪费内存空间,插入删除快,但是查找效率差,那hash map的底层数据结构是什么呢,S Mac底层不是一种单一的数据结构,而是数组加列表的组合,另外在GDK1.8以后呢,底层实现会更复杂一点,最重要的变化就是达到一定条件后,列表会被转换为红黑树,不过在hash map这一节,我们不会细讲红黑树,只会简单的介绍一下它的功能,红黑树的原理,我们会通过另外一节课来讲解,题外话,网上你去搜索红黑树,它会非常详细的告诉你红黑树的各种规则,你看完以后很大概率会觉得,红黑树果然很难,但是学完红黑树那节课,你就能完全理解红黑树是怎么来的,为什么要有各种规则,截的旋转和变色本质上又是怎么一回事,绕远了,先回到我们1.7的简单的版本,这就是hash map最基本的数据结构,图中呢,每个格子就代表一个键值对,Hash map呢,是map的一种,Map也就是映射的关系,一个key映射一个value,那么它的键值对结构为什么这样设计呢,那这些串在一起的这个键值对是为什么呢,为什么有的键值对是在数组里面,还有一些是挂在列表上呢,比较奇怪,对吧,想要解决这个问题,最直接的办法就是看源码,不过在我们看源码之前,其实呢,可以自己在心里先有一个思路,可以想一想,我们先不考虑hash map中的hash,如果现在让你来实现一个map,也就是这种键值对的集合