00:00
大家好,我是海波老师,咱们继续来讲Java的集合,那么之前讲到了map接口的实现类啊,哈希map,那么之前咱们提到过啊,除了哈希map以外,咱们的map接口呢,还有一个比较常用的一个类,咱们叫哈希table啊,那接下来咱们就把这个类呢,咱们讲一下,所以我们这里拷贝,拷贝以后呢,把它去掉,我们写上一个二,咱们点击OK啊,然后把里面的东西呢,咱们全都去掉就可以了啊,那这里呢,我们也不要吧,把这个去掉啊,来咱们这里写上咱们叫哈希table,同学们,这个稍微注意一下,我们这里的table的T啊,是一个小写的啊,然后呢,我们叫哈希table,然后呢,给它来我们写上它叫table,等于new,咱们叫哈希table,它其实呢,也是我们Java u当中的一个类,我们需要给它import进来就可以了,那么好了,那么把它对象创建出来以后,我们CTRLP呢,我们给大家看一看,其实啊,跟咱们前面讲的哈希map的这种构造方式呀,大体相同,不光是我们的构造方式,包括咱们的使用呢,也大体相同,大家看一下我们这里。
01:00
那也会有put,大家看一下对不对,也会有我们的table点,我们的get,也会有我们所谓的table点我们的remove啊,包括这些东西,其实啊,这些方法呢,我们基本上都有,诶老师啊,那都有的情况下,他们接口又都是一样呢,那为什么咱们要用不同的这个类呢?这里呢,咱们就需要给大家去解释一下这个哈希table和咱们之前哈希map的区别,我们别的咱们就不再说了,它的基本原理啊,包括它的一些方法的使用啊,其实区别不太大,好了,我们从几个不同的方面呢,给大家稍微的做个区分吧,我们这里写上它突突啊,一实现方式是不一样的,我们这里来,我们把那个哈希map呢,我们这里复制一个,咱们可以关联一下,对比一下来咱们说一下所谓的实验方式不一样呢,就是我们继承的这个父类它不一样,大家看一下我们的这个哈希table啊,它继承的父类呢,是我的directory,而我们当前的这个哈希map呢,它继承的父类呢,是我们的abstract map,所以啊,从父类的角度来讲,他们就不一样,那么你继承的。
02:00
功能它也不一样,对吧,这个其实还是比较明显的,只是我们用的时候呢,可能感觉不到,但最起码它确实啊,他们继承于不同的副类啊,接下来我们来说我们的第二个TODO2,我们的底层结构的容量不同,这句话是什么意思呢?咱们那个哈希map呀,它底层其实是有数组的,咱们说过吧,它的容量默认是16,所以啊,我们哈希map它的默认是我们的16,所以这个需要大家注意一下,但是呢,我们的哈希table诶,它的默认容量是我们的11,它的容量是不一样的啊。还有一个呢,就是说我们的哈希map呢,它的那个key和V啊都可以是nu值,大家来说一下来我的图图三。咱们的哈希map,它的那个key和那个V它都可以为,那所以大家看一下我这个map来我们来运行,我们叫点,我们叫put,我给它个nor是可以的,我给它个nor也行,所以呢,我运行以后看结果,你会发现我们这里没有任何的问题,你看不会报任何的错误,但是你如果写上一个table,你也这么写叫做什么呢?我们的put给他一个捺,再给他一个捺,诶你这么写,写完了之后,你运行之后,你会发现它就会报空值的异常,为什么?就是因为它的底层是不一样的,所以我们的哈希啊,Table它的那个我们的key和那个V,它不能是我们的nu,它是不允许的啊,这个咱们需要注意一下,还有一个呢,就是我们底层啊,它在做哈希运算的时候,其实是不一样的,所以这里给大家去解释一下,咱们的这个地方,来咱们哈希map的底层啊,它是有一个哈希算法,所以呢,来写上它的这个数据。
03:44
定位,它的数据定位,它采用的是我们的哈希算法,但是我们的哈希table它采用的它就是哈希code,所以说你会发现我们的哈希map呀,相对来说会比它更复杂一些,为什么呢?它需要数据更均衡一些,而我们的哈希table呢,它没有用到这种哈希算法,它用到的是哈希扣的,诶这个呢,咱们知道就行了啊,嗯,还有一个呢,就是我们性能上的一个差别了,这个性能上的差别啊,主要体现在于多线程的环境当中,我们的这个对象被访问的时候,它的性能的好与坏,所以这里咱们说一下就可以了,咱们还没有讲线程,咱们说一下我们哈希map的这个性能较高。
04:33
而我们的哈希table,我们的性能较低,为什么哈希table性能低啊,是因为它考虑多线程的并发,执行的时候你也访问,我也访问,担心出现冲突,它会额外增加一些特殊的操作,但是我们的哈希map就没有这方面的操作,诶,恰恰他没有做安全性的考虑,所以在多线程同时访问的时候,哈希map可能会出问题,而我们的哈希table这方面就会。就没有这样的问题啊,所以这个也是我们需要给大家区分的,其实别的操作上啊,就没有什么可说的了,这个大家知道就可以了啊,基本的操作跟前面大同小异啊。
我来说两句