00:00
那现在我们刚才讲到哪,说这个上面有个student s1student s2,我们六出来之后的equals方法呢,返回的是true,表示S1和S2是相同的,那么放到这个S集合里边,安卓是只能放一个吧,那现在我们看看它放它放几个。看好啊哈,Code在这儿并并没有重写这个student它哈code方法没有重写。没有重写high code,代表它调的是这个负类的high code,而负类的哈code你看见了这个对象new了一次,它的内存地址是这个值,这个对象new了一次,这个内存地址是这个值,对吧?地址不一样,那么high扣的方法,访问的值不同,转换的速度下边是不是也不一样?转换的数字下边不一样,那就相当于一个对象放到这个位置上,是不是另外一个对象就放到另外一个位置位置上啊。所以大家想想,这两个对象是不是都会放进去,最后呢,会发生问题是吧,来,你看。Student它这个集合的size是几啊,是二。是二个位啊是二。按说应该是一,但是但是结果是二。
01:04
对吧,显然显然不符合什么哈西集合存储特点。怎么办,怎么办,各位?怎么办?所以你的ES方法重写的话哈,Co方法必须得怎么着重写。明白吧?这是第一个知识点啊,再往下第二个知识点,就是我主要是想向大家所说的一个问题是什么呢?就大家注意。注意啊。如果一个类的equals方法重写了,那么哈希。哈西扣的方法必须重写。并且方法如果是。
02:03
哈西扣的方法,返回的值必须一样,我这句话说的有没有道理?Equals方法返回处,我问大家是不是代表它一定是在同一个单项列表上?同一个单项列表上,哈希值是不是一样?大家思考一下。如果equals方法返回处代表它们是在同一个单向链表上同一个单面哈一值一样,所以E方返回处哈方法返回的值必须是一样的。对吧,大家思考一下equals方法返回处表示什么呀?在同一个列表上对不对?S方法返回处表示两个对象相同。
03:00
对吧,在同一个单向链表上比较。那么同对于什么呀?对于同一个单项链表上的节点来说,它们的哈希值应该都是一样的,哈希值都是相同的。所以。返回值也应该怎么着啊,相同应该相同啊,Equals返回处的值必须得是一样的。你记住这个啊,并且ES重启的时候high也需要重写。你不重写你看不行啊,结果是结果是二啊,你这个结果应该是一才对啊。对吧,哎,所以这个时候就得重写,以后老师重写,该怎么重写,记住啊,千万别自己写啊。千万别自己写,用idea自动生成,注意啊哈西扣的方法和equals方法。
04:02
不用研究了啊,不用研究了,直接使用idea工具生成。但是这两个方法需要同时生成。那么。哈,Code e的方法不用研究了啊各位啊,直接idea生成,但是这两个方法要同时生成,各位啊,同时生成来,我把我这个ECO怎么给它注释掉啊,注掉之后呢,我生成一下out insert,大家看equals含equal是不是在一块。这个idea工具是不是E在一块啊,点一下它就行了。啊,点下一步你选上name啊,这个地方选择很重要。明白吗?我如果是认为两个名字一样,就代表是两个一样的这个学生的话,你就把上。明白吗?来点下一步。来点下一步。
05:00
来点下一步。好,大家看,这就是equals方法,这个就是什么呀,就是我们的一个方法。的方法,好,那么这个时候我们这块有有同老师这个代码我需要看的,我们不需要啊,不需要这是工具类对吧,这个不需要看明白,Idea生成的没问题啊,这个over overwe可以去掉,也可以加长,没关系啊。去掉去掉也行也可以啊,来我们再执行。好,大家看现在这个哈希哈希set集合里边放的是不是就是一个元素。对吧,它为什么放一个元素啊。好,大家看S1的哈扣的值是这个值,S2的哈扣的值是不是这个值啊。对吧,这俩行业值是不是一样了。现在这个重写high的方法,你看最后equals如果是true的情况下,High的值是不是结果是一样的呀?
06:00
对吧,哎,重写函之后变这样了,下边的也是这样啊。重写哈code之后。是这个值,嗯。看见了吧啊。那有的老师我以后应该怎么重写,假如说我现在这里有一个class,这个class有一个叫product商品。商品,商品里边有什么属性啊,商品有这个编号啊,有这个名字。对吧,啊,有这个商品编号,有这个名字啊啊,然后呢,加上一个构造方法,无餐的。然后再加一个构造方法是什么呀?是有参数的构造方法。来这两个参数都选上点OK啊。来,再加上一个set get方法。好。这两个都选上。那接下来你要重写high code的equals吧,是不是重写呀?哈希code加equals是不是?哎,假设啊,假设业务要求什么呀?商品编号相同并且什么呀,商品名字相同表示同一个商品。
07:11
重。明白吗?你需要把这两个都选上,如果你认为说如果商品名字一样,就表示同一个商品,那你可以把这个去掉。明白吗?哎,如果说你说商品的编号和名字同时都得一样,才表示同一个商品,这两个都得选上,如果说你是你是说只是商品编号一样,就表示同一个商品,那你可以把下边的去掉,你看你将来怎么重写啊,你看这个业务的要求是怎样的。啊,点下一步,点下一步啊,然后点下一步finish就行了啊,这样的话是不是商品编号相同对吧?哎,并且说我们名字一样的话,就代表是什么,是同一个商品。对不对,哎,你看对吧,生成就行了,不用管别的啊,不用管以以后这个都不用写,就讲了半天这后不用写啊,但是有一个事儿要告诉你,放在哈希map集合这个集合它的K部分的元素,以及放在哈希set这个集合里的元素,哈希Co方法和echo同样需要同时重写,这是一个最终的一个结论,各位。
08:14
终极结论啊。放在什么呀,这个哈希map集合K部分的。以及放在哈西塞集合中的元素需要同时重写。哈西扣的方法。和equal方法,这一点是肯定的啊,这是肯定的。好了,这个例子我们就先说到这儿。
我来说两句