00:00
行,那咱们继续再往下啊,哈希map啊这块呢,咱们刚才说到这个叫做哈希表的这种数据结构,它是怎么往里存的,它是怎么往外取的,各位啊,这个存的原理和取的原理要知道同一个单里边的哈希值相同,对吧,你不能把哈希扣的方法在重启的时候重启成固定的一个值。对吧,重启成固定的一个值,那这样的话变成单项列表了,如果说你每一个对象在new的时候,它的哈一扣的值都不一样,都不一样,它就变成一位数组了,所以我们呢,都叫散裂分布不均匀,我们让散裂分布均匀的,首先我们得让它的哈一扣的方法在重启的时候啊,哎,有一定的技巧来保证它散裂分布时均匀的啊,散裂分布均匀的。好了,那么接下来呢,我们来看一看它这个方法到底会不会,哈西扣和哈西扣的方法它到底会不会调用。行吧,啊,就是这个原理呢,我们大概这个含仪表的原理就是这样的原理,怎么存怎么取,是不是它为什么?呃,在两方面的效率都很高,增删效率高,它的查询效率也高,原因是什么?
01:04
对吧,哎,他怎么怎么做的啊,大家思考一下,想一想啊想一想,当然这里有一个哈希算法,有老师哈,算法是个什么东西,其实哈算法不是一种具体的算法,是一种思想。啊,算法不是一种具体的算法,是一种思想。它可以把不定长的字符串。啊,就是假如这是个字符串这么长,这个字符串这么长,这字符串这么长,对吧,就算你不定长的字符串,经过行算法这个思想之后呢,它都会变成一个什么呀,固定长度的值。这是行业算法的一种思想啊,咱在这儿呢,就不需要去掌握这个行业算法这这块的东西啊,你呢,知道这个行业表是它的一个运作原理就行了啊,运作原理就可以了。来我们这块呢,讲了半天,各位重点是啥。重点啊,重点是放在什么哈希map集合K部分的元素,以及放在哈希。
02:04
Set集合中的元素需要同时重写哈希code和equals方法。啊,需要同时出现口的方法。我们先测试啊哈希map集合K部分的元素特点。行吧,K部分元素的特点啊,比如说map。然后map,呃,这个inte这个类有没有重新high扣的方法呀?重启了吧。哈,西口的。是重写了。哎,Equals重写了吗?是不是也重写了?对吧,哎,那string呢,就不用不用说了,String equals也都重写了点过去。看一看它的哈扣的。
03:02
是吧,哎,这是它的high的方法,然后呢,它还有什么呀,叫equals吧,这个不用看了,这个之前我们就看过了,Equals也重写了,对吧?哎,这个这个都还口一口都是,实际上这个K啊。这是K啊,这个是key,它的什么哈希code和ES啊,都重写吧,那么现在我们new一个哈希map new完之后呢,接下来我们调用map的put方法,往里边放1111,然后呢,放一个什么呢?放一个比如说就是张三吧,然后接下来呢,我们map掉铺的方法,我们再往里面放一个,比如说6666是吧,然后我们叫李四。然后接下来map掉put,我们放一个什么呀,7777,然后呢,放一个网五进去,接下来我们map掉put方法,我们再往里边放一个2222行吧,然后这边呢叫做照六,然后接下来map掉铺的方法,我们放一个2222K重复了啊,来放一个king。
04:06
来,我们输出这个map的size。Size。他是四吧,有同,这不是五吗?可以重复Y6覆盖吧。是吧,好,这个是不是四个长度啊,K重复啊,K重复的时候VALUE6会自动覆盖,就这个照六就没了,变成king了,我们来遍利一下map集合,遍利map集合各位啊,那么遍利map集合这一块呢,我们叫map entry set这个方法,然后呢,返回一个什么呀,我们set集合是不是我们叫做map点。是不是好,这边是integer,然后和string。对不对,哎,这是一个set,然后接下来我们在这块呢,给它调用for each啊循环我们取一下这个。
05:01
行吧,拿过来,然后呢,我们叫做叫做entry吧,Entry啊冒号set,那接下来我们调用我们的entry的get key啊,然后呢,加上去一个等号,加上去安呢调用get value,哎,我们把这个数据取出来来走。好,大家看,你存进去是11666777和222是吧,但是你取的是77711666和二二,你看无序。不可重复。对不对,哎,无序不可重复,通过这个你就可以验证出来了,这个验证结果就是无序不可重复啊,验证结果就是无序就是哈希map集合K部分啊元素。啊,无序不可重复,而且我之前给大家说过,Map集合当中起决定性作用的是谁,是k value只是我们K的一个附属品,其实这个K和value它都是存在什么地方啊,存在这个节点对象note里边了。
06:01
你往这个map机构里放K和value建筑,对,实际上它底层是new一个节点,No的这个node节点,它有K啊,它有value啊,是不是这不是有K和value吗。对不对,哎,有KY6各位啊,有KY。啊,另外呢,我们点过去看一看这个位置呢,哈奇map是吧,这里有个默认加载因子,大家看有个默认加载因子叫0.75。有的老师这个默认加载因子是个什么东西,大家看啊,说构造一个空的对吧,它的默认初始化容量是16。并且它默认的加载因子是0.75,那么这块我要给大家说一个什么事呢?就哈希map集合的默认初始化容量是16个啊,默认加载因子是0.750.75。啊,这个默认加载因子是。是啊,当什么呀,当数组,当这个哈希map集合底层数组的容量达到什么呀,75%的时候。
07:11
数组开始扩容,各位啊,数组开始扩容,也就是说这个一维数组也有可能慢慢慢慢就满了,你懂什么意思吧,有可能就慢慢满了,但是呢,它并不是说满了之后再扩容,你理解什么意思吧。它其实是当你这个数组它满足容量达到75%,达到这儿,那么这个时候这个数组就开始怎么着啊,开始扩容了。啊,所以这里有个加载因子的事儿,各位啊,给大家提一下,了解一下就行,了解一下就行啊,有一个默认加载因子点七五达到75%的时候,数组开始扩容。啊,然后还有一个特征,我在这里给大家说一下啊,给家说一下,大家呢知道就行了,这个哈希map呢,它这个初始化的时候。
08:06
我记得这个老版本当中啊,它有一个提示。有一个提示各位啊。这个提示是初始化容量最好是二的次方,二的次幂。看一看我们这边有没有。找一下啊。二的次方。哎呀,这么找比较费劲啊。再往下。初始化容量。找一下啊。
09:03
大家看,这是默认的一个初始化容量吧。对吧,但后边有一句话大家看见没有,你看。在新版本中也有,你看the default初始化容量,默认的初始化容量对吧,是一向左移四位。一向左移四位,其实就是什么呀,就是16嘛,对吧,哎,这不是二进制位运算嘛,向左移四位嘛。对不对?哎,他说什么要求是二的次方,你看a power of two是二的倍数,就必须是二的倍数。这个呢,这是一个官方的一个一个一个一句话,各位啊,我在这儿给大家说一下。就哈机构默认出厂证是16。重点啊,记住这句话。就哈希map集合初始化容量啊,必须是二的倍数,这也是什么呀,官方推荐的,官方推荐的啊,这是因为因为达到什么呀,达到散裂分布均匀。
10:11
为了提高什么哈希map集合的存存取效率所必须的,各位啊,这有一个叫做哈希map集合,它初始化容量必须是二的倍数,看见没有,必须是二的倍数。啊,有同学老师为什么是二的倍数,你现在记住就行了,你是二的倍数,你就可以提高什么呀,我们这个叫做存的效率,以及什么取的效率,还可以达到你的散列分布均匀,如果你要不是二的倍数,那将来可能会让你的哈尼麦这个性能呃大打折扣,就这个意思啊,就就这意思,所以这块呢,有一个二的倍数需要大家来记一下啊,然后它的默认出量是16,加载因子是0.75。
我来说两句