00:00
下面呢,下面呢,我们给大家讲一个map,前面我们讲的都是那个。Sequence啊,那下面呢,我们讲常用的一个map结构啊,Map结构呢,也是非常有用的,Map结构跟那个前面我们讲的这个序列呢,有一个最大的区别,它存放的时候呢,它不再是单个的值啊,它是k value的。也就是说这个时候呢,咱们取的时候就不能依靠它的下标了,诶,而是依靠于它的K。对吧,这个呢也用的非常的多,那这种结构呢,首先我们看map,它是一个散略表,一般来讲散列表,只要提到散列啊,一般来讲是什么时间呢,一般是数组加。这个列表。一般来说是这样实现的,一般是数组加链表来共同构成这个散力,而且有些做的比较好的散力呢,它分好几级,第一级,第二级,第三级。
01:04
把那个性能就更好了,那同学们有有时间可以看一下这个就是如果同学们哪天有时间可以适当的看一下,我这一段视频就专门讲了一下哈希散列的视现。啊哈西闪离者,只是呢,这是用构语言讲的,同学们应该能也能看得多,构语言比这个SC要简单很多,就是从复杂度来说,SC的复杂度比构员复杂的不是一丁半点,说你们开学的会的Java学的会的同学看构员就跟玩似的啊,基本上看一遍就知道怎么回事了。而且更圆呢,它因为能够看到底层的地址,那个也学的比较比较通透啊,同学们有时间可以看一下这个,再有一点时间同学呢,可以看一下这个递归和这个迷功啊,还是很有用的,提高一下自己的内功,好现在我们来看一下映射啊,映射我刚才讲了,一般来讲这个是数组加链表哈,那它存储的这个内容呢,一般是k value6的这种形式,而且有个特点。
02:06
我们这个映射它是无序的,哎,同学们想一想,为什么映射是无序的呢?因为它有序已经没有什么意义了,你想一想,你是通过K来取得,又不通过索引是吧,你那个有序没有序有什么意义呢?而且,而且有一个语言设计专家,就是有一个人叫king汤mpson,大家可能没有听过,不知道king汤普son是谁学Li宁克,只知道king汤mpson是不是啊,King汤mpson学过C语言的知道吗?C语言的主要设计者就是这个老汤啊,就是king汤mpson啊这个哥们呢,好像200几年的时候在清华做了一个演讲,到那边去做了个演讲啊,我老远听了一下,完全听不懂他在讲什么,就走了啊啊大胡子大胡子一个人挺有意思的,这个人很厉害,他他首先C语言,他在C设计C语言之前还设计一个B语言。啊,B语言设计出来过后,跟他的一个,跟他一个同事叫Richard啊,丹尼RICHER2个好朋友一商量,我们搞一个C语言,又设计C语言,设计完C语言过后到了什么时候,大概是2000年左右,要2000年,我们中国不是老说2000年要那个病毒爆发吗?就那个时代,人家2000年不玩了,干什么去了,开飞机去了啊,那个时候年龄已经到60多岁,70多岁了,去当那个飞行员,你知道吧?
03:25
飞行员玩了一段时间,玩了大概九年,一想不行,我还得会干会干回老本,到谷歌一召唤,又去开发了一套新的语言,叫go语言啊,这些人就开发语言跟我似的啊,我们学一门语言学的要头疼脑头疼脑热的,他他整整整的很郁闷,他在刚当时设计这个map的时候,因为购言里面也有个map,他原先设计的那个map是有序的,结果后面那个用的那个程序员说map不要程粹有序的,那个老唐又把这个取掉了,说陈是唐总,那就真成无序的吧,很有意思,这个map呢,从理论上来说,有没有序确实确实意义不是很大,因为你这个case它规定是唯一的。
04:10
他在这规定了K是唯一的,因此呢,首先它的特点是它的。是无序的,同时大家是不是学过它的K不能重复,这一点大家要有基本认识啊,你学完这么多。你学完这么多集合,你要知道他们基本的区别,那还有一点就是它的K不能重复,K不能重复。不能重复,哎,这个Y6是不是可以重复啊,Y6可以重复,因为它是靠K进行,它关键点为什么叫散裂,它凭什么闪出来,就是靠K,如果你的K重复你的闪力就可能闪离到同一个点。就会拿到不同的值,那这个就没有唯一性了,所以他要求K不能重复的根本原因是因为它的底层就按照这个底层实现,就要就要求你不能重复,你一旦重复,将来我一闪略闪略到两个点上,到底取哪个,他就迷茫了。
05:02
所以说这个就他就直接把这个K不能重复拿到了,第二个呢,它也是无序的,因为有序对它也没有什么实际的意义,好了,同学们,我们做了一点基本的介绍,我们来看一下家务中的脉谱,那么我直接到成个运行一下就完了啊同学们好,现在我们讲的是这一节的内容,叫映射脉搏的基本介绍,OK。那整一个叫这个玩意儿,好,我们简单的回顾一下Java的,诶very easy啊very easy,那我给他来一个标题三。啊,那么说到呃,这个map呢,它的基本的结构,第一个呢,它底层是散列及数组加电表,然后呢,它存储的内容是KY6,这是基本常识问题,别忘了啊呃,还有一点呢,呃,这个map呢,这个在Java里面的map呢,它是无序的,诶它是无序的,而且呢K不能重复。好,这套基本我们看一个案例。
06:00
啊,案例演示。啊,应用啊,应用案例给大家做一个简单的回顾,好朋友们,那我就直接把这个代码拿过来了啊,代码其实一点一点都不,嗯,这个很简单啊,放过来。直接在这新建一个Java类,我们直接叫Java的哈希,哈希map的测试。好,同学们给他写到这里,来,来一个主函数,哎,来个主方法往这一粘,好同学们看到这里呢,我们需要引包啊,引包就引进去就完事了,大家看我这里故意写了NUMBER1啊,NUMBER2NUMBER3NUMBER4,好,这时呢,我们来获取一下NUMBER2。这个地方你看到这个是无序的,从这输出是无序。无序的。OK,执行一下就可以了。可以看到输出的结果呢,并不是跟你存放的顺序相同的,你看先取出NUMBER2。
07:04
诶,然后再取number显然不对,而且呢,我们可以看到,如果我在这里再存一个NUMBER1,那么这个时候它其实会用最后这个来更新这个是吧,他已其实当同存在的是,它其实它的底层是更新。好,这一点呢,我们做一个简单的测试。好的,同学们可以看到,那么这个时候NUMBER1呢,就自然变成了500,好回顾就到这里。啊,简单的给家看一下它的一个流程,好,同学们把这段代码给大家保存到笔记中去,这是我们对Java的麦普做了一个简单的回顾,过了啊,过了,那下面呢,我们来看一下开ner里边的map有需要什么了解的吗?有需要什么了解的吗?看第一个啊第一个呃,SC的map普呢,跟Java内斯也是一个闪列表,也就说它的底层机制呢,几乎是一样的。呃,但是呢,他这边呃做了一个扩展,就是开的map呢,分为不可变和可变两大类,两大类但一般情况下呢,我们肯定是选用的是可变的,因为你不可变,好多方法你就用不了了。
08:14
对吧,好多方法用不了了,所以说在这里呢,我们一般用的是scan connection MU table里面的map,这个不可变呢,呃用的相对就是根据你的需求来说啊,一般来说这个用的相对少啊,相对少,因为毕竟我们要涉及到变化,好这是呃开的基本介绍,我也给同学们把,说到这里very easy。好,下面呢,我们就要准备来举例说明了。啊,总结了两点,第一点。第二点。哦,第一点我们说了,呃,它也是一个省列表。啊,说明它底层呢也是一样实现机制,第二个呢,就是它分两种,一种是可变的迈步。对,还有一种呢,是啊,一种是不可变的,还有一种是可变的。
09:01
分别对应不同的包啊,这个是可变的。脉搏这个是不可变的,好。呃,现在呢,我们来看一个案例,老规矩啊。我们来看一下map的构建流程开的,呃呃,如果说我们构建是不可变的map,我们先说构建不可变map,不可变map你直接写map就可以了,为什么呢?因为你不需要引包。因为不可变的是默认的。对,好,所以说这个不可变的就是MAP1写上就叫k value key value1对一对的写。而且我故意在这写了个北京,那说明他在默认情况下,就是你是可以做这种,呃,这个KY6类型他不做限制,也就是说他支持any。啊,那么还有一点要给同学们说清楚,那么构建的map的元素就是这个元素,它在底层呢?就这个KY6它在底层其实是用这个top来实现的,也就它它是这个元组类型,元组类型在里面用好多地方都出现。
10:07
啊,所以说在嗯SC里面,它的每一对这个所谓的KY6底层都是汤二。那么我们来测试一下啊,很简单的代码,我们来玩一把。好,同学们,现在呢,我们新建一个包,叫做map DEMO,好的零一。201走一个。走啊,组函数玩一把,好这个就创建起来了啊,再说一遍啊,这个就是默认。默认map。是这个imun imun table下面的这个map,那么同学们可以看一下,我定一下光标。啊,果然是在这里没,而且呢,它是在这个。抛里面直接声明的,所以说这个就可以直接用。
11:00
好,然后呢,我们在这里做几点说明啊,说明第一点我们说明一下,呃,就是默认,呃这样第一个默认就是map,第二个呢,第二个它的每一段这个词你可以任任意类型啊,就KY类型呢,没有做限制,可以自己写啊K。啊k value类型类型啊,可以支持啊就叫支持。啊,支持什么呢?诶支持的是这个any。还有第三点同学们看到,那么它的每一对K呢,在底层是TEMP2把这个要记一下啊,就是在底层。在这个底层。在这个脉脉的底层啊,脉的底层。它底层是什么样的呢?就是每一个每对每对A这个对每对每对这个k value呢是什么呢?诶是COMP2。
12:05
好,这一点大家注意,那么我讲的是汤,你们就知道电力的时候应该怎么取了。边的时候肯定要取出来过后就点下划线一这种方式来取啊,否则你取不到,否则取不到,好我们来跑一下。打出map。好执行一下。执行一下,好,现在呢,我们可以看到这个结果呢,就已经出来了啊,非常的简单啊非常简单,好,这是我们这个小结,这里说完了,我们把这个简单的给大家写了进来。好,我们这儿写的是构建map,对吧,构建map。好,给他来一,这没粘过来,诶这没粘过来啊,待会儿我没有题会让大家做一下。啊对,下午呢,应该按理说做一点小练习就好了。啊,不然的话,大家确实很容易犯困。好,没有办法啊,讲语法这个确实是说实话挺难受的啊,因为讲语法它比较枯燥。
13:03
就没有案例,就是没有这个练习的东西。好,我把这个代码给写到这里来,代码如下。代码如下啊代码呢,我就直接给大家板书到这里就可以了。好,同学们,放到这里。好,针对这段代码的说明呢,就看这面三点就可以了。把这三点搞清楚就可以。好,我看一下啊,那现在呢,我们就把麦的一个基本介绍和它的创建就说完了。
我来说两句