00:00
那么接下来的话呢,我们看一下map中的常用方法,它其实呢,就对应着我们要讲的这个层次一了啊,层次一里边这个map的主要实现类就是哈map,然后呢会用一个哈map会掉方法,现在我们主要看这个方法的这个事儿,这块我们来看一下这个课件往下走,这块方法呢,我列了这样的一波啊。CTRLC似乎呢也不少粘过来。哎,放到这儿。行,涉及到有添加修改的,有删除的,有这个查询相关的啊,还有这个叫原视图操作啊,其实呢,就便利我们的KY6和entry的这样的集合了啊呃,这块列的呢,你看挺多的啊,咱们呢还是做一个整合。哎,做一个小结。这个小节呢,类似于咱们前面讲到的,像历史的时候提到的。啊,这个呢,我们叫增。山。改。查。有插入吗?没有,因为呢,咱们这块呢,是无需的吧。
01:01
是吧,无序的话就没有顺序了,那你往哪查是不是。啊,就好比呢,你去这个,比如说这个火车站,火车站这个大厅的话呢,你看大家都没有顺序是吧,如果你大喊一声,我想插个队。以为你疯了呢是吧,根本就没有对哈。诶,所以呢,没有对了,没有顺序了,那就不可能有这种插入的操作了啊,所以增删改查。长度。是吧,然后便利,哎,就这几个事儿。好,那这呢也是我们平时在开发当中用的比较多的场景,所以呢,对应的这些方法呢,大家最好你记住它。啊,用了一个哈,Map上来呢,调相关的方法直接呢就写了你这块呢,添加个元素都记不清楚是啥了,那有点太过分了是吧。除了这些方法之外,剩下的一些方法,你说我不确定有没有,你看一下API文档,这都没问题,好先看第一个啊,那我现在呢,把这个元素呢,添加到map当中,这个用的叫put。哎,这个叫添加啊,不的操作里边一个K一个Y6,这就是键值,对。
02:00
啊,增山。哎,删的话呢,这个时候呢,注意它不也没有索引吗?没有索引怎么删啊。对,我们通过K来删。哎,通过K来删,所以这个呢叫。在这啊,哎,它那有个返回值你看。那你猜一下这个返回值是啥?对就是Y6啊对就是我们呢,哎,把这个K对应的这个键值对呢都删掉,通过K呢找这个间值对,然后呢,找到以后就删了,删了以后呢,把这个Y6呢返回,那万一呢,这个key不存在呢。Y6就是闹是吧?啊,增删修改。修改一看修改啊在这儿呢,修改诶修改。注意这个铺的方法呢,也表示修改。啊,这个比较特别。诶,当然这个增加的话呢,这块还有一个呢,就是我们可以呢,去添加好多个是吧,添加好多个的这个过程当中啊,其实也可以理解成有这个修改的行为啊,什么意思啊,就是你比如说我们现在添加呢,叫KY6往里放了,那如果说我现在放的这个K呢,咱们刚才提到了是一个set了,不能放相同的是吧,比如这个呢,我们放的字符串叫AA了,然后现在呢,AA,比如说考了50分啊,我要再放一个AA。
03:13
哎,我写个60分。对,这个时候呢,按照我们可能直观的理解说,那不就应该进不去吗。诶进不去是一种选择,还有一种选择就是说我可以呢,拿我这个相同的这个key对应的value呢,我可以60覆盖50。默认的一种行为呢,其实是覆盖了,所以呢这呢就体现为是一个修改的行为了。修改你相同K的这个Y6值。诶注意啊行,那你这个葡萄奥的话呢,也类似啊,葡萄奥不就是把这里边儿的键然就都添加进来,你要没有那就添加,如果要有的话呢,是不是就覆盖。所以这个诶他呢,你也可以把它放在这儿是吧,只不过这块呢,就是操作多个减脂堆的特点啊。好,增删改查。查,那就是获取,其实呢,我们就是通过K找这个Y6。哎,就这两个特征啊,好长度。
04:01
Size是吧,跟原来一样便利,便利这块呢,我们相当于体现的就是,哎有这就比较复杂了,便利K级。啊,然后遍历Y6级。哎,便利。N几是吧。这样几个特点便利,这个key级其实呢也很好记,K呢,不是构成的是个set嘛,所以你发现这个方法呢,就叫做key set。然后这个value的话呢,既不是set也不是list啊,它这个名字呢,也比较朴素一点,就是叫value,因为多个嘛,Values是吧,返回的是一个collection,然后NG的话呢,又是个set了。所以你看也很好记,它这个方法呢,就叫做entry set。还挺有特点的是吧,哎,这呢,就我们说的这样的一个情况。OK啊好,那么通过我们刚才这样的一些方法呢,大家呢,其实你看你有没有发现一个特点。什么特点呢?咱们讲的这个,比如说以list为例吧,它那叫一个一个的数据,它呢叫有序的是吧,你第一个放这儿,第二个放这儿,第三个放这,第四个放这儿,以此类推,然后它会有个索引,这叫零,这叫123。
05:07
啊,依次往后排,然后呢,你通过这个索引去找这个元素。啊,那现在呢,我们这个呢叫map啊。Map这块呢,其实诶在咱们说哈尼map其实也是个数组是吧。哎,也是个数组,只不过这个数组里边呢,其实它就是个N垂类型的数组了啊。呃,这儿呢,我们说了,他其实是这种无序的啊,第一个呢,可能他是第一个,他可能是第二个,他可能是第三个,我根本也不关心你这个所谓的123。啊,只管往里放就行,他放的怎么着呢,他是不是放了k value6啊。K1V1是吧,这个呢叫K2V2 K3V3。是吧,他不关心这个数,他呢,其实关心的什么呢?或者说我们核心的这个数据啊,还是放在Y6里了。只不过呢,我是通过K去找的这个Y6。这呢是通过K找的Y流,如果呢,你要把这个例子里边这个索引看成是K的话呢,它不就也像是个减值对特点了吗。
06:03
所以呢,我们在例子里边相关的方法你看都是,诶我就输入索引啊,你告诉我这个值,这个的话呢,你是输入一下这个K,告诉我这个值。哎,就是这样的一个特点。因为呢,它是通过K找的,他跟你这个索引没关系,所以他就无需的呀。啊,就这样一个特点啊,稍微的体会一下。行,这呢是我们说的这些方法,那除了这些方法之外的话呢,还有你比如说这个clear,咱们讲也提到过,这个所有的数据都清空掉了,然后是不是包含当前这个key,是不是包含当前这个value,你像这块呢,既然涉及到是不是包含了相应的你。对于Y6来讲,是不是得重写e code方法是吧?哎,你要这个key的话呢,这个你得先哈code去找一下哈code呢,完了以后呢,有必要呢,你再找一下那e cos是吧,看是不是能够找到它,所以这块呢得重写两方法。啊,EMT是不是空的。啊,是不是跟我们当前这样的一个结构呢?是ES的,那你要是想equals,这也得是个map存放的KY6还都得一样啊。
07:00
哎,这呢,就我们说的便利的行为好,那这呢是我们说的这样的一些方法,那我们就有必要呢,是不是得测试一下这个方法了,所以回过来,哎,在这个下边啊,我们在这说一下啊。叫测试,哎,Map中的常用方法。那OK啊好,这个方法呢,咱们就把它粘过来了。嗯,往后拽一下啊。嗯,这个把它俩再往后拽一下行,上面这块呢,我们测试的属于这个叫呃实现类啊。哎,测试map中的实现类啊,OK。好,那我们下面呢,就来看这些方法了,这个可能看起来有点不方便的,咱们就。放到这边啊,下边。单元测试。三。好可以啊好,那这块测试的话呢,咱们就用这个主要实验类,那就是一个哈奇map。所以我这边扭一下哈希map啊。Out,加回车来一个map,诶就可以了,现在我们演示这个叫put这个操作。
08:04
刚才呢,其实也已经演示过了。哎,Map点我们叫put这个位置,比如说写个AA啊,这个56,哎,我们就在。整几个啊。就是现在呢,因为我们这个k value呢,没有任何限制啊,都是欧债类型的,所以说这块呢,就就随便来了啊。其实呢,咱们在实际开发当中啊,这里边儿呢,一般的键都是四吨类型的啊。嗯,再来一个,比如说BB。啊,这个78。这个呢,其实什么类型都可以,那咱们这块呢,也为了方便起见,哎,我也整一个person吧,哎把这个person呢,我CTRLC一下,咱们CTRLV粘过来。哎,OK1下行,这个person我们看一眼。啊equals,诶把它呢,我们给它打开吧。行,这是一个person,好回来这个位置呢,咱们比如说一个person。啊,这个Tom,哎,给Tom了Jerry吧。12岁行,这块呢,我们给一个值。
09:02
哎,56好1234,诶我这呢就放了四个元素了,四个元素的话呢,我们可以呢,简单的诶,你这样看一下这个map,它呢,相当也会去调这个图司率的方法了啊把它们都打印一下,或者呢,我们刚才也提到了有一个size是吧。诶,或者是它这个对应的这个长度啊,就是我们这里边儿的这个啊。行,来测试一下,走起。正常就出来了啊,哎,我们呢是添加的顺序是这样子的,然后这块呢,显示的这顺序呢,跟我们添加顺序是不一样的,这个你能理解啊,这个是正常的就可以了,因为呢是有四对,所以呢这是一个四没问题。好,这块我就不演示这个叫put out了啊put out呢,就把这里边儿呢,每一个呢都添加进来就行,诶下边这个呢叫幕啊,云幕就是移除的意思。诶在这啊,比如我们通过这个map点,哎,我调一个这个的操作,这里边呢,比如我们选这个AA吧。
10:00
哎,那如果找到它了,我们就移除掉它,还有一个返回值是一个object类型的,其实就是我们的这个Y6值,诶打一下我们这个当前的Y6值看一下啊。来,走起。这呢,因为我们找到这个AA了啊,找到的话呢,所以这块呢,我们返回的这个值呢,就是它对应的这个Y6值,接着的话呢,如果你要是再去打印一下我们当前这个map呢,里边呢,就没有我们这个AA了。诶看这里边就没有这个A了,哎,相当于呢,就给大家移除掉了啊好,这个呢就是移除的一个操作,然后呢,下边这个呢叫修改,修改呢用的还是我们这个put。哎,上面这块我们理解为呢叫添加。哎,这样一个行为。诶修改好修改的话呢,我们还拿这个map呢,给它入手,目前的这个map里边是长这个样子的啊长这样的情况下呢,比如我们就拿它来这个。修改啊,通过这个map点我们去调这个put方法,我这呢还写的叫BB,现在我改成叫99了。
11:03
哎,就这么着啊,这个时候你会发现呢,我们这个铺方法呢,其实它诶点进来啊,是不是也有个返回值。这个反射值呢,大家目前看到的这个呢,你都看成是object就行啊,现在我们还可以再去接收一下,那你猜一下这是谁。哎,就是咱们旧的那个。就是你不是把人家给替换了吗?你把谁给替换了,替换的这个值打印一下是吧,那在这个题目当中就应该是。78是吧。呃,因为原来存的是78,你现在这个呢,不是给人家替换了吗。哎,OK,哎,走起。哎,这个看78就出来了,哎,也就是说呢,如果你要有这样的需要啊,你说我想看看你替换以后呢,原来那个值是多少,需要的话呢,那你就接收一下。当前呢,我们那个map里边看一眼。那这边已经变成99了。诶说明呢,我们修改就成功了啊。好,那如果这块我写成叫bbb。是不是就没找到。
12:00
哎,没找到的话呢,那这块呢,我们这个就成啥了。是不是就能添加了,诶注意啊,这样的情况行,这块呢,你要注意一下啊,就是我们这个put这个行为,这个我们叫修改,修改的话呢,我们这呢,涉及到这个K,咱们得保证呢,你找到这个元素了,然后呢,我去替换你旧的Y流找到了。说白了就是我得证明呢,我得跟你线的某个元素得一样是吧,那由于呢,这是K了,怎么叫一样呢。是不是得先哈code,然后eose是吧?诶所以这块你要注意一下,如果这块我要是想体验这个修改,我用的是咱们这个的话呢,Person这个里边呢,务必啊。是不是要把这个哈衣裤腿方法你得给他加上。诶,这个一定要注意啊,不加的话呢,这块呢,相当于他要去找哈值跟你原来那个对象的,虽然说你看似两个都是ES是一样的两个对象,但是你这个算的哈值默认就不一样了。我就不演示了啊,注意一下这个事儿。行,然后呢,长度说了查询这个叫get操作啊,这个比较简单啊。
13:04
把它CTRLC。诶,这个呢是查询了啊呃,刚才呢,我们打印了一下,这是他目前的这个最新的信息,比如我现在就想找这个67。啊,那我就map点,我就get一下。哎,把这个67拿过来,其实这呢就自动装箱了啊,这呢就找到我们对应的这个Y6值了。来答一下,我们这个Y6值。啊,67这个呢,叫Tom这就打出来了。哎,这个有有名了哈。六一吧。那这不就汤姆就出来了,行,比较简单啊,所以增删改查长度啊,这些呢,大家拿起来就要能写,一定要理解它里边这个意思,下边呢,我们来说说这个便利的问题。哎,便利操作。行,这个便利操的话呢,涉及到了啊,有三个不同的场景,第一个呢,我们便利一下它的K级。
14:05
诶,编了一下我们这个K级啊呃,那首先呢,我们得有一个map。也得有一些元素。把这个呢,我们就删掉了啊。好,那么这块的话呢,我们去遍了一下这个K级,K级的话呢,直接呢调我们这个方法就可以了,哎,我就调这个叫k set,然后呢,就把所有的K呢就构成一个set了,所以返回值呢,就是一个set,不妨呢,我就叫做k set了。那下边的话呢,你只需要呢,把这个set呢做一个便利就可以了,这个咱们都已经说过了是吧,几种方式。啊,其中赛啊。三种。两种吧。在闪没有索引,是不是就迭代期跟增强是吧。例子的话呢,是不是有三种啊。对的啊,所以这块我们就使用一下这个迭代器吧。OK啊,He set点。哎,Out,加回车eer,然后呢,Well一下。
15:03
点has next。诶打印一下这个呢,直接就点next这样就行是吧,哎,你要是想看一下这个。提前拿出来呢,想多说一句呢,这个呢,我们得到呢,其实就是具体的一个key了吧。我类型的一个系。OK啊,然后这个K的话呢,我们把它呢输出一下。那就这样个情况了。好一下。哎,这个出来了。哎,这儿呢,一共是有四个是吧。好,那么这四个的话呢,我先这样盯一下啊。我先放到这儿。这个呢,是我们第一种方式啊,我们来辨利一下这个key啊,然后第二个场景的话呢,我们来辩论一下这个Y6。诶,这个啊,CTRLC。哎,粘过来。变了value的话呢,我们直接呢,还是拿这个map就直接呢,调这个叫values这个方法了。然后呢,我们al加个会车,它得到的是一个,那下边就变利collection,其实跟我们原来说的这个方式一样是吧,迭代期啊,增加for啊都可以啊,那这块咱们换一个吧,就是使用这个增强for。
16:13
这么着是吧,那就是for,这怎么写?Object是吧?哎,Obg冒号Y64,哎这样就行啊,里边呢,我们把这个obg再打印一下,这呢就是每一个Y6值。嗯,好,然后呢,你看一下啊,我为什么把它截图呢,这个呢,是对应的这个key哈,下边我们打印是这个Y,你看打印出来的跟它会不会有这种对应关系呢。啊,这个是这几个是吧。跟这块你看有这种对应关系不。是不是有啊。对的啊,哎,也就是说我们这个其实Y6呢,它存放的位置呢,就是由我们这个K决定的,然后我们在便利的时候,你找K呢,它是这样顺序,你找Y6的时候呢,也是找到K的位置呢,去找这个Y6了。
17:01
所以它其实呢,是这种对应的一个特点的啊。好,这个呢,是我们变了一下这个Y6级,那其实我说呀,我要是不用这个方法呢,我也有办法去找到这个Y6啊。诶,这个呢,咱们可以看到这个叫方式一了啊,就是你直接调它那比较方便哈,其实呢,还可以利用咱们上面讲到的一些现有的方法呢,我给大家传出来一个也行,其实。对,咱们上面不是有一个叫get key嘛,这样就找到你对应的value了,那K的话呢,这不我们上面已经找到了是吧。哎,你相对应的这个Y6不就也有办法去找到了吗。对吧,行这块呢,比如我们再稍微的借用一下它啊,咱们重新来这块呢,我们就得到这个K了,然后接着咱们比如说演示一下这个。For循环增加for吧,Object,这其实就是这个key,这个叫key set1。诶,进来以后我们从这map呢去get一下,我把这个key放进去。哎,这呢,同样的,哎,咱们能找到对应的这个Y流。哎,打印一下外流,诶同样的是可以的啊。
18:04
诶同样的是没问题的,就是下边这几个啊,只不过呢,这种方式的话,你得先找到这KK呢,再去找这个value流,那不如我直接,如果只是便利的话呢,还是这个方便一些是吧。哎,所以这个方式呢,我们更推荐一些啊。好,这个呢,我们就把它注释一下,这呢是找这个叫Y6啦,然后呢下一个需求。K和外流是吧。这呢,我们就构成的叫entry了。哎,CTR一下。这么着啊好这个呢,或者你感觉比较多了,咱们就再写一个方法也行。这个呢,在无。六六啊。好练了一下,我们这个叫N垂级,咱们可以把上面这个呢先再拿过来啊。选C一下啊。就把这个需求呢,把这个往下写,往这这合适啊。啊这么着现在的话呢,我们去变了一下,这个叫entry啊,首先呢,把元素呢放进去,哎这块我们刚才看到对应的这个方法呢,就调这个叫entry set这个方法了,没问题,所以呢,我们直接呢map点啊叫entry set。
19:13
哎,这么着,然后alt加个回车,这呢得到的还是一个set,但是这块为了建明之意哈,我们是entry构成的一个set。那下边的话呢,我们就变了一下这个side就可以了,还是两种方式都行。嗯,给他七吧。这个out加个回车啊。While their head next。好,提前呢,我把这个呢先取到哈。点叫next方法,此时的话呢,我们得到的其实认为呢,是一个object了是吧。但其实的话呢,这个是一个entry吧。对,它构成的是一个entry哈,这个entry的话呢,注意它其实在我们这个map当中啊,CTRL加一个N,咱们看一下这个map。
20:00
哎,回过来啊,这个看哪个版本都行啊,这个map里边呢,我们说是一个接口了啊,然后呢,接口我们在CTRL f12。这呢都是一些方法了啊,然后呢,里边有一个内部的接口。诶同学可能说,诶我们这个没讲过,确实咱们讲面向对象的时候没说过哈,当然呢,这个也不难理解,你想咱们讲累不累的时候说这是一个class。诶,我们在这个类里边呢,可以声明一个内部类啊,可以再声明一个class,这叫外部类,这叫内部类,那我在这个类里边呢,自然而然你也可以声明一个接口。啊,这个只不过我们就没有具体展开说了哈,那其实这个接口里边呢,它还可以去声明一个接口。也可以。啊,也可以的啊行,那这儿呢,就是在map接口里边又生明了一个内部的接口,这个接口呢,叫做NT了。哎,就是我们所说的啊,Map里边放的叫建值对,建值对实际上呢,是键和值封装在一起构成了一个N垂,就是以接口的方式呈现的,那在我们这个具体的实现类呢,叫哈希map是吧。
21:00
哈希map里边呢,那就相当于也得有一个是不是实现这个接口的一个类了。对的啊,然后我们就CTRLN,咱们稍微的先了解一下。哈,Map呢,我一进来。I map呢,这边是吧,进来以后的话呢,其实这块已经暴露一些信息了啊。然后CTRL f12这个呢,你去找一下这个NT这个接口的实现类叫啥。哎,往下走。哎,这个时候呢,我们就会找到一个叫做。Node的一个结构。诶,这个noe,你看它实现了Mac里边的NT了是吧。也就是说呢,咱们往哈希map里边放的这个key啊,Value啊,其实是放到这个node里了,Key value都在这儿。啊,是这样一个特征啊。嗯,这块呢,稍微多说一句啊,在JTK7的时候呢,这个map也叫N。啊,JP8的时候呢,因为它不是把底层又改成宏位数了嘛,然后顺便呢,就把这个名也给改了,它叫node了,但是我们说呢,哈希ma里边放的是NT,仍然不错,为啥呢?你实现了N接口,我说你放的是N不也没毛病吗?
22:07
诶,所以照样可以啊行,只不过呢,具体来讲它叫node了啊,这样从数据结构里边呢,我们都是一个个节点,所以呢叫node呢,似乎呢感觉更合理一点啊。好,这个呢,我们就知道它整个的这样的一个情况了,那既然知道这个情况了啊entry呢,诶这个我们再点一下进来,它里边你看就有这个方法叫get key get value,自然而然呢,刚才那个实现类呢,就会重写这两个方法了。好了,回过来说了这么多,想干什么事呢?我想强转。是吧,这个位置的话呢,既然你放的都是N垂了,我是不是就想写N垂了。哎,然后这个位置我就想写这个叫N垂啊,这叫强转,但是这个N的话呢,注意它是个内部的接口啊。内部接口的话呢,你是不是得由外部的去调才行啊。要么你看不见是吧,所以得这样调啊,这样调完以后呢,我们做一个强转,这不就可以了吗。这个能理解吧。这咱们当中讲累不累的时候呢,不是person类里边有一个狗,有一个鸟是吧?不得是person.dog person.bird。
23:07
内部的这个呢,你外边看不见,你得由外部的这个结构去调才行好,那我为什么要强转呢,主要是我想。对,我想去调它这个get key和get value了啊。呃,然后我们再去拼接上,比如说你指向的是一个。是吧,哎,N垂点get一个value,哎,我们把它呢打印一下,哎,就这个思路啊好我们跑一下。嗯,OK啊行,这个左边这块呢,是咱们就是N垂里边取的这个K,右边呢,就是我取的对应的这个Y6值。行,这个OK吧。嗯,这样啊,这呢,当然你说我就不去做强转了,如果说在这里边呢,大家说我就简单一点,怎么办呢,就想调一下这个nice的方法,这呢其实就是取到的是ENT垂了,Entry呢,它有个图出方法,它呢打印出来的时候呢,也把这个K和VALUE6给我们呈现了,只不过呢,它中间用的是这个符号哈。
24:02
哎,它用的是这个符号,咱们这儿呢,相当于是呢,把它单独的又给取出来了而已,是吧,所以呢,就是看你想怎么展示呢,你说我就想简单一点。哎,那你就用刚才说的这种方式,这个看成是叫方式一吧,简单一点啊。然后呢,把它一注,呃,下边我们的这种方式稍微的就力度呢更细一点了,你可以把里边这个细节呢,又给它展示出来。哎,这个叫方式二啊好,这个呢,就是我们便利这个entry的这样的一种方式。那我说呀,其实呢,你用这个方法也行,还可以呢,有第二第二种这个方式。这个呢也算成交。方式一啊。诶方式一啊,那方式二的话呢,其实呢,就借助于咱们刚才呢,变那Y6的时候呢,不是也有一种方式吗。哎,我把这个呢,这样如实一下先啊怎么着呢,就是我们先找到这个K的这样的一个集合,然后K呢,对应的一个钙的方法,不就把Y6找到了吗。其实也可以是吧,就相当于我们去调这个key set这个方法,然后再配合上一个咱们的。
25:06
Get里边呢,放这个key。就可以是吧,也行啊。比如说我们先啊,通过这个map点我调那个叫he set。啊,这不就是key构成的一个set了吗?哎,我换一个吧,那用增加for循环了啊,这个呢是AB。这呢就是具体的key,这上是t set。里边呢,我就找到这个K了,不就它嘛,然后呢,让它呢去指向对应的Y6。Value呢?不就是我们拿着map去get一下,把K放进去就是VALUE6吗?也行是吧。哎,你看这样也可以。行,就是这个呢,用哪个呢,你自己定啊呃,推荐的话呢,既然它有一个这个呃entry set呢,那我们优先考虑呢,我们就用它吧。这样的情况啊。嗯,这个方式的话呢,你得看清楚对应啊,我把这个呢改成叫方法吧。
26:00
哎,这样的这个词呢,它俩是一组啊,然后这两个是一组,好,那么这样的话呢,咱们把这个map中的这个长的方法这个呢,咱们就说清楚了啊,然后呢,对应回来咱们这个层次一层次二这块呢,其实基本上就说的差不多了。诶直播呢,针对map呢,比较特别的有一个叫map,还有这个叫properties,一会过来呢,我们把这两呢稍微说一下,那么关于map的整个我们这一章要讲的内容啊,其实也就结束了啊,重点的话呢,还是关注于这两个层次啊就OK啊。
我来说两句