00:00
好,那么前一节课呢,咱们把这个哈奇map,包括另的哈奇map这个底层的源码呢,就带着大家看了一下,这个呢,过程是比较痛苦的啊,应该说达到咱们讲这个高级部分的一个高潮是吧,难度上的一个高潮啊,哎,后边的话呢,这个就不会比这个更重了啊,这是第一个说明的事儿啊,再者的话呢,就是这个事儿的话呢,大家肯定,呃,这个重要倒是重要,但是呢,它是我们要掌握这个这一章知识的第二个层面的。嗯,还是回归到第一个层面,你还得先会用这个map,那尤其呢是这个哈希map啊,就是会利用他的对象,然后呢调它里边的方法,然后第二个层面呢,大家再去关注一下它底层的这个实现的原理,包括它的扩容的一种方式等等涉及到的这样的一些这个呃,这个变量或者敞量这些结构啊,那么下边呢,咱们就来说一下,那么在map当中常用的方法有哪些,这个呢是咱们需要掌握的第一个层面,大家晚上练的时候呢,也得是先练这些方法的使用,然后呢,你再关注上面这些这个底层源码的实现啊,那下边呢,咱们来说明一下,这个第一个层面需要大家掌握的啊,就是这是大家首先需要掌握的,就是map这个啊,接口当中定义的方法。
01:14
当然了,这个map呢,是个接口,它这里边生命的方法呢,那我们关注的呢,这些常用的都是抽象的方法了,那我们肯定是以哈希map,以它为例,咱们看一下这个方法具体是什么意思,那么这些方法的话呢,就在我们这个PPT当中,嗯,打开以后这块呢,我找一下啊,这里呢,就是我们提到的这些常用的方法,那这些方法的话呢,我们给大家演示一下啊,哎,CTRLC。哎,拿过来看这块呢,这些方法呢,我就先写到这个第五个这个部分了,添加。OK,那这个方法的话呢,咱们就做一个测试了啊,测试来在这块呢,我们去写。
02:02
行,那那测试的话呢,我们就先来关注一下这里边的,比如提到的这个第一块这个事情啊CTRLC。啊搁这了啊行,那我们首先看一下,嗯,这呢涉及到添加删除和修改,添加的话呢,提到了一个put和put,删除呢叫remove,这个清空clear,那这个修改的话呢,我们也由这个put来体现,那这块我们也用过一个哈map了,我就粘过来,我们向这里边呢去添加数据,我们调的是put方法。这个put put方法呢,我们需要指明这个key和value,那暂时的话呢,K value6呢是可以是object类型,如果呢,你是一个基本数据类型的,像这个123,那仍然是以这个包装类的方式呢来呈现,比如说我们这呢叫A。啊,逗号一下,当然咱们在这个真正开发当中啊,通常呢,咱们这个key value这个类型呢,都是确定的,比如说你这个key呢,都是string,这个value的话呢,都是integer,一般呢都会是这样子的,咱们就要到下一章呢,讲泛型的时候呢,再明确一下这个事情,暂时的话呢,它没有要求,那其实你可以混着写啊,就比如说我这个K呢,我这又放了一个数值型的啊,Y6呢,我们说也可以只相等,那我就都是123啊,就是类似的这样的啊,目前呢没有任何要求,实际上的话呢,我们说这个key一般要么都是string,要么都是别的,通常呢,这个K是string的情况呢,要高啊多一些啊,那右边的话呢,这个你可以来制定其他的一些数据,那这呢,我又写了一个A,这个Y6呢,我换一个。
03:39
换一个这个27,那我们看一下这个AA呢能进去几个,这呢我们只是做了一个put,简单的我们先做一个输出map,相当于调它的初视方法,把这几个有的数据呢就给输出了,那显然呢,这是我们A呢指能有一个,那么有的这个呢,这个大家其实也看到这个结果了哈,哎,如果你没看到的话呢,你得知道A呢只能有一个了,那Y6对应的是谁呢?我们看到呢,是不是87啊嗯,这个呢,就别这个从感性上呢理解错了啊,说这个跟那个值一样了,这个呃,87又没进去,不对,咱们也看源码了,它这儿呢,体现出来的其实是一个修改是吧,诶这块呢是一个添加操作。
04:26
啊,这个A跟现有的这个K是相同的,这个时候我们就要替换原有的这个123。好,那么葡刀就是将我们一个新的map当中的这个,所有的建队呢,都放到咱们当前这个map当中,这个也可以演示一下,诶这呢,我们就去新建一个map。哎,这呢,我叫这个MAP1,我往它里边呢,添加两个新的元素啊CTRLC。哎,这个我们叫一个CC,这个呢,我叫一个叫DD了。这样,呃,Y6值呢,我们说是可以相同的,包括呢,刚才这里边啊,刚才这里边这个123那个还被替换了啊,看不出来了,那从这来看,现在呢,我放在两个123,包括跟这个123也都是相等的啊,现在我们第二下map点叫put哦,来把我们这个MAP1里边这个数据呢,诶MAP1呢放到我们这个形态的位置,接着呢,我们再s al一下map。
05:24
诶,I al这个map啊,那我们看下此时这个map当中它所包含的这个数据。哎,在这呢,嗯,这个。AA87这本身就有的,这也有,然后这个呢是有在这儿啊,这你看那个输出的没准啊在哪呢?嗯,我们呢给大家增加了两个啊,CC123啊DD123它就进来了,Y6呢,它是可以相同的啊,这个比较简单了。嗯,下边呢,这个叫clear啊,Clear这个先remove remove的话呢,这个叫移除,那移除就是按照指定这个K呢,把这个数据呢移除掉。
06:06
Remove,这里边儿我们放的呢是key。啊,就是按照指定这个key呢,去移除这个减值,对我们map点我做一个操作。这时候呢,我们把这个比如说CC。放进来我们呢,就可以接收为一个值,这个值呢,你猜一下这是谁啊,我都写出来了,看这个变量名也能猜出来了哈,哎,就是把我们要移除的这个键值,对的这个VALUE6呢给返回一下啊,那移除完以后呢,我们再来看一下这个map。行,这个问题好执行,那么我们呢,是把这个CC呢,这不就移除了啊,用的这个CC做的这个方法的参数,呃,这个CC对应的Y6呢123我就返回了,那么接下来这个结果map当中呢,就不再有这个CC123了。
07:04
因为呢,你做了一个remove,哎就这样子,那如果这个位置呢,写的是CCC,显然呢,是不是不存在,不存在这个时候呢,返回的是什么呢?哎就是闹这个呢,也非常好理解,就是没有的话呢,那自然这个返回的值就是闹了也不可能是别的啊。就返回负一啊,这是object类型的哪种负一啊。嗯,好,这呢叫下面呢叫clear,这个也很清楚,跟咱们collection当中也有同样的这个方法。哎,清空呢,我们当前这个map map.clear一下,然后我们在s out一下这个map,注意我这时候s out这个map,我这时候不写map了,我写map.size啊,一会我会说这个方法,这会控制帧吗?汇报控制帧异常吗?这个一定要清楚,我们这个clear操作等同于说把map等于复制位闹了吗?是吧。
08:05
这个可粒里边是这样做的吗?这个我我说这个clear跟咱们说collection那里边一样,是清空这里边的数据,可不是说你把这个map给清了啊,对吧,Map给支撑着,这不对,Map还在,对,只是里边没有东西了,咱们讲那个collection的clear时候,我讲完它以后,后边不不是还掉过什么is empty吗。那你也没报控制异常啊,啊,只是说呢,EMT这时候是触了说明呢,不是啊,不是这个操作啊,与这个操作不同,这个大家要注意一下。所以呢,下边我这块去调size,这个呢,它就应该输出是零了,你也可以看一下这个map,看看这时候长什么样子,嗯,这个零它呢,这里边没有数据了,它就只有一对大括号来呈现,我们去输出的时候呢,它默认的这种形式呢,就是这是K,这是VALUE6,中间呢是用的一个这个等号啊,这个你别理解成是赋值了,就是呢,用这个等号来区分一下,左边是K,右边是VALUE6,仅此而已,然后不同的这个建设豆呢,用逗号隔开,哎,这样的一种方式呈现,行,这呢是我们说的这个第一波的这个方法啊,然后接着涉及道呢,叫元素查询的相关方法。
09:25
CTRLC。这个呢,不妨我就写到这了。这个我们叫TEST4。好,那首先呢,我们也是保证里边呢,有一些这个数据啊,CTRLC啊把这个删了,就这样放了三条数据,那么首先呢,叫get获取指定这个key对应的这个value是多少,就是一个查询的一个方法,其实我们直接呢,就s out了map点我去get,比如我这写一个45啊,找到这个45对应的这个value。
10:07
哎,123啊,那如果呢,这个位置你写的这个K呢,不存在。对,这个呢,我们也能猜出来啊,它就是个no行,这个呢比较好理解,下一个这个呢叫get操作了,那这个我们也拿过来啊。哎,这是这个get的方法,具体的这个说明呢,我后边都写了,接下来诶,判断一下我们当前map当中是否包含指定的这个key,下边是否包含指定的这个value啊也非常的好理解。直接我们这个map点啊,我们叫contains key啊这呢,比如你写一个这个啊叫BB这样子啊一下啊这个呢啊就写的is east吧。哎,Exist啊,是不是存在。
11:04
啊这样,那显然呢,此时它是存在的。那这就是个处行,嗯,这个时候呢,Contains key,大家想一下,是不是也得去找一下那个哈希值是吧?嗯,再去那个哈希值呢,判断它的数组中的位置,然后看看谁跟它是equals的啊,再找一下是不是包含这个key啊,下边是不是包含指定的这个value,是否包含指定的这个value,然后呢,还是按map点叫contains这个方法调的是value的这个。啊,比如说你看看是不是有这个123,这时候呢,你会发现诶有两个都是123。那这个不妨呢,我们还用这个变量吧,CTRLC。那你要是有两个123,只要他找到一个是处,它就不会再往下去找了,所以这呢也很自然,它是一个处啊,再往后,Size刚才已经调过了,获取当前map当中KY6对的一个个数。
12:08
啊,获取这个对数,其实empty是不是为空,嗯,这个也非常简单啊,嗯,这个如果我们这个map呢,咱们调过这个叫clear以后啊,你再呢,去调一下map点叫is empty,哎,它显然就是空的了。嗯,就是空的了,它可不是一个控制帧了啊,这个对象呢,哎,在堆空间中的这个堆,这个结构,还有就是说这是占,这是堆,咱们这儿呢,这不声明的叫叫map。咱们呢后边呢很少画内存图了啊这个,但是大家呢,呃,你要是有点迷糊,你就画一下哈,Map呢,我们去new了一个哈希map,哈希map里边呢,我们生明了一个,你不管是叫呃,好像都是叫table了啊,这个table的话呢,这不又指向了一个具体的数组嘛,哎,速度初始长度是16啊,这不是里边就好多这个位置了,然后呢,现在人家叫克尔啊,你在put的时候呢,是往这里边去添加这个数据的啊,它这不是所谓的叫无序嘛啊,不是按照这个顺序填的啊,还可能会有这个指针等等,我现在呢可粒操作。
13:11
可操作,它是不是把这个数据呢给我们清掉了,这个new的对象仍然存在。这要注意一下霾empty呢,就是我们,嗯,其实其实这块clear的话呢,它做的事也比较简单啊,嗯,它这个位置不等于no size呢改成零了,然后呢,这里边把你这个数组呢,是不是就全部改成这个no了,就是吧,哎,就这不是就全部复制为no,就不让你有值了啊,做的也比较简单,然后呢,你判断这个empty的话呢,就看着这个size就行了。那是零就OK了。行,这是我们说的这个事啊,嗯,Equals判断呢,两个对象呢,是否是equals的,跟咱们说的collection呢,其实也类似,要想这个结果是一个true,它是不是也得是个map,哎,同时呢,这里边存的数据呢,也都得一样,哎,它的就是一个true,行这个呢,我就不测了啊哎,大家呢,下来你可以考虑测一下,造两个map,然后都是哈奇map,呃,KY6啊,KY6KY6都一样,E4的时候它就是个出行,这是我们说的这个,诶这一波的这个方法。
14:23
呃,下一步这个方法呢,涉及到我们关于map的一个便利操作,哎,稍微呢麻烦一点,诶先这个停一下。
我来说两句