00:00
大家好,我是海波老师,接下来我们来讲一讲Java集合中的map接口,Map接口啊比较特殊了,它特殊的原因在于啊,它定义了集合对象中对我们的KV建子对数据的处理规则,前面说过了,所谓的KV建子队呢,就是把两个数据呢当成一个整体来使用,那么我们的第一个数据呢,我们就叫key,那么第二个数据呢,我们就叫V,那么我们可以根据key啊,就关联到我们的V,在这个关联的过程当中啊,我们称之为叫映射,而这个map这个单词呢,恰恰就有映射的意思,所以啊,咱们的map接口中就定义了很多对key处理的方法,也包含了很多对V处理的方法,那么咱们接下来呢,就具体的看一看啊,来我们这里呢,创建我们新的类,来咱们拷贝,拷贝以后呢,我们写上一个11,然后呢,把这个改一下,咱们叫做map。好了,把里面的东西啊,咱们全给它去掉就可以了,去掉去掉以后把这个去掉,这个不叫collection了,我们称之为叫map,我们这里呢,采用map接口的实现类,咱们叫哈希map,诶,哈希map哎,同学们,我们看到这个名称会不会感觉熟悉一些,它的名称当中是不是哈希再加上一个map呀,所以呢,我们的哈希我一看到这儿是不是感觉跟之前的那个哈希set差不多的感觉,所以啊,咱们这里给大家讲一下,它的底层呢,也会有哈希算法,那这个map呢,就没什么可说的了,对吧,它实现了我们的map接口嘛,所以首先呢,我们来构建它的对象,咱们叫哈希map,然后呢,写上一个map啊,等于new,咱们叫哈希map,写个括号就可以了,写完了以后,这里我们导一下,它也来自于我们Java u点哈希map啊这个包里面的没有问题,行了,我们来看看它的构造方法,来鼠标放进去,然后CTRLP提示一下,你会发现呢,诶同学们有没有发现它里面也会有容量的概念,所以啊,这里给大家解释一下。
01:51
我们的哈希map的底层呢,其实用的也是我们的速度加链表的方式,跟咱们之前讲的那个哈希赛其实本质是相同的,所以我们拷贝,拷贝以后呢,我们给它放过来啊,能放过来放过来以后把它改成我们的叫哈希map,诶老师你这画的不就是一样吗?诶没错,咱们画的是一样,但是本质不一样,为什么?因为哈希set呢,它是实现了collection接口,而我们这个是实现了map接口,他们一个是面向单一的数据,一个是面向TV键字的数据,所以这个就不一样,那么这个里面呢,就应该是这个样子了,所以来咱们写上它,咱们叫什么呢?我们叫第四。
02:30
所以大家会发现我们这里啊,就有K和B的感觉,我们这里呢,也给它写上咱们叫A。我们叫A1啊,然后呢,这个地方我们也给它写上一个我们的A1吧,哎,所以咱们写上A1啊,好给它放过来行了,然后呢,我们把这个C呢,我们就写它,咱们就C3吧,嗯,把这个写它啊,咱们想逗号我们叫做C3就可以了啊好了,那这样的话呢,我们就接着往下来看了,那么往下来看的话,我们现在呢准备呢,往里面添加数据,所以写上添加数据,那么添加数据的时候,我们的map点大家看一下,它有一个方法叫做put。
03:06
这个po的方法呀,我们一看就是往里放数据的意思对不对,我相信啊,这个好理解,而且它提示一下,你会发现它的数据呢,一个就是放key,一个就是放V,那好了,我就写上它,咱们放一个叫A,然后呢,放一个一行了,诶放一个字符串一吧,嗯,写上它,然后呢,放过来以后,我们再给它放一个B。哎,我这写个张三好不好,然后呢,我这写上一个李四好不好,哎,写上他啊好,然后呢,把这写上一个二,然后呢,再写上一个我们的王五。好了,写完了以后,同学们,我们现在呢,要给它打印一下了,所以我们打印咱们的map。同学们,我们这个map啊,咱们看看运行啊,运行运行以后咱们来往下看,你会发现李四等于二,张三等于一,王五等于三,是不是把李四和二当成了一个整体,把我的张三和一当成了个整体,把我的王五等于三当成个整体,对不对,所以啊,它确实就是个KB电子,对,而且有没有发现它这里根本就没有所谓的顺序啊,所以咱们的哈希map跟咱们前面的哈希set一样,它的存储是无序的。
04:12
所以啊,咱们的数据存储它是无序的,哎,老师啊,那是无序的话,你能不能放重复数据呢?其实我们说过了,它的原理呢,跟咱们前面讲的哈希赛非常类似,所以呢,它其实也不能放重复数据,诶老师你不说了吗?它的这个地方的数据格式不一样吗?一个是单一的数据,一个是我的TV键字数据,那么这个哈希算法它是怎么算的呢?哎,这里给大家解释一下,我们这里的哈希算法呀,它并不会把它们当成整体来算,它会根据我们KV键子对中的K来决定你到底是不是相同的,什么意思啊,你的DAC它会看我当前的K是否相同,比方说咱们两个A就相同了,我们的这个D和A就不相同,我的A和C也不相同,那比方说我把我把这个地方改成一个A2。
05:01
这时候你会发现这两个数据其实啊,它的K是相同的,但是它的V是不相同的,哎,老师,那这个时候它是当成了一条数据呢,还是当成了两条数据呢?这个时候啊,我们就要给大家说一下它的基本原理了,它的原理是什么呢?它是这样的来把这个去掉,去掉了以后会怎么办呢?它这样的,它把我的A1呢,它就直接往这放。做了一个哈希运算以后,他就发现,诶,你的A呀,它指向了我的A1的位置,所以它就会存在这个位置,然后怎么办,他会把A2呢也往里放,往里放的时候他就发现哟,你的这个A跟这个A它们俩的定位是相同的,那么相同的话,你不是二吗?你不是一吗?哎,这个时候它就会有一个覆盖的概念,大家还记得吗?我们之前的那个哈希塞没有覆盖的概念,对不对,为什么?因为它的值相同嘛,覆盖是没有意义的,但是我这儿就有覆盖的概念了,什么意思啊,把我们的A2,把那个A给它覆盖掉,同学们,这个大家能不能明白,首先我得先判断它的K相不相等,如果K相等的话,它的那个值我就准备给它覆盖一下了,所以咱们来演示一下,我把这个张三呀,我改成四。
06:10
我运行一下,记住这个第一个是张三,你第二个是张三的话,它俩就相等了,相等的情况下四就会把一覆盖掉,我运行一下,运行以后看结果,哎,你会发现这个张三就不再是一了,它已经变成了四了,哎,老师呀,那你变成了四,那一没了,那也不行啊,万一我想得到一呢?这时候给大家解释一下,当我们覆盖数据的时候,我返回的结果就是你覆盖掉的那个值,所以呢,这里我们说一下,来我们想想它,我们叫做什么呢?叫修改数据,那么我们的po的方法啊,它也可以修改数据,那么返回值呢,就是我们被修改的值,所以呢,咱们来演示一下,把这个呢,我们点一下,点我们现在写上它,我们现在运行一下看结果,你会发现我们的一就会得到。你看这个修改的值就被得到了是吧,它是我们的一,所以啊,这个po的方法呢,其实我们添加数据用它也行,我们修改数据用它也行,因为往里面添加的时候,如果判断它重复了,就会把它覆盖掉,就等同于修改了,对不对,就是这个道理,哎,老师,那我添加可以了,修改可以了,那我查询可不可以啊,当然可以了,所以来图do,我们叫做查询数据,而且啊,咱们这个查询数据啊,你不是有TV键值对吗?所以说我们的map点,我们会有一个get,这个get呢,就是取得我们当前的那个张三,把那个key传进去,你把这个传进去以后,你得到的就是那个V。
07:39
你现在就是把那个V得到了,那个V不就是四吗?所以我们运行,运行以后看结果你会发现我们得到的就是那个四,没有任何的问题啊,所以呢,我们的这边也是可以的,那好,那我删除呢,来拿过来图do,我们叫做删除数据,那么我们这里呢,我们写上一个map,点我们的remove,诶,里面传的也是那个key,所以我写上一个张三就可以了,写完了以后当三就被我删掉了,里面只能剩下李四和王五了,所以我运行一下,运行之后我们当前的李四和王五不还在里面吗?对不对,就是这个道理啊,行了,我们的哈希map的最基本操作就给大家演示到。
我来说两句