00:06
哎,那我问大家一个问题啊,那你说remove方法有没有重写equals。是干啥的,是删除吧。这不吗?删除对象吧。哎,那你说删除对象它会掉equals方法吗?就比如说现在我在这来个集合啊,大家看collection。Collection啊,叫CC又一个。哎,你说我CC往里边放了一个S。你一个死准。这个词叫hello CC往里边放了个S1,我CC remove。Remove,什么S2?
01:04
那我这个集合现在的size是多少?这个是不是创建集合对象啊,这个位置是不是创建字符串对象啊,这个是不是加进去啊,对吧?好,这是不是又创建了一个新的字符串对象啊。是不是删除S2啊,那么这个集合的元素集合中元素个数是多少啊?零吗?New了一个release的集合,然后呢,New了一个string,把S1放进去了,New了一个S2,删除S2会不会导致S1删掉?就删S2,会不会导致S1没了?
02:01
你看挺有意思是吧,这不拗了润把S1放进去了吗?拗了一个润,然后现在S2通删除这个S2会不会导致S1没了。来执行一下,肯定会啊,最后结果是什么呀,零。大家看这个集合里边明明放进去S1,你删S2的时候S1没了,这说明什么呀?这说明它底层remove是不是掉了E方法。你删S2是因为S2和S1是什么?他认为是一样的。看见了吗?你remove方法,看看这个remove方法。Remove。Remove。删除对象啊。有没有掉ES?是不是掉了equals方法呀。Remove方法是不是也调equals?你看看源码呗,对吧,这个源码上显示你看remove方法不掉的equals吗。
03:04
对吧,那你这个S1和S2是不是他就认为是同一个对象。In s1.1 cos s2。代表同一个呀,是处啊。因为S1.1cos s2是同一个。所以你删S2的时候,S1就没了,因为你删S2的时候,他认为你删的是S1。因为S一点e cos s2的结果是true,就是S1.1cos括号里边S2他认为是一样的,就是他认为就是Java认为什么S1和S2是一样的。因为它底层掉了E方法。删S2,删除S2就是删除谁S1。因为S1S2的equals方法结果是true。Equals方法的返回值是true。所以你看它是这样做的,那么我问大家,现在假如说我们在这里有一个集合里边U的对象扭出来,把U1加进去了,那U2这块呢,我判断包含不包含,包含,那我问你,我C这个集合点remove u2的时候,U1会不会没了?
04:16
大家看U1是不加进去了。U2是不是扭出来的,我集合3U2,我问大家现在这个集合的长度是多少,是不是也是零。因为你这个U字,我问你重写没重写equals。重写ES之后,我问你是不是就代表U1叫杰克,U2也叫杰克,U1就是U2 u2就是U1,你把U1加进去,删除U2的时候,U1会不会没,会不会没了?肯定也会吧。所以这个集合现在你删吗?这是删除U2吗?删除U2,你U1就没了,因为U1和U2他认为是同一个,因为你重写equals方法了。所以这个结果就是零。Remove u2之后这个结果就是零。
05:02
走。我们来看一下。零零看见了吧,这个是零,下边这个也是零。但如果说你不重写equals方法的话,它会掉还是会掉equals只不过调到equals是你object object类里边的equals方法。听懂了吗?而你这个比较的时候,比较是两个对象的内存地址嘛。所以你要是不重写,那这块就删不掉。你要不重写就删不掉,他会认为U1就是U1 u2就是U2,因为你这扭出来对象和这个new出来的对象内存地址不一样,所以U1就是U1 u2就是U2 u1不是U2 u2也不是U1,所以你U1放进去删除U2的时候,你删不了,里边还是会有数据的。还有数据。明白什么意思吗?就你现在你不重写这个ES方法,假如说不重写,你上面这个U1创建出来,添加进去U2就出来之后,包含U2吗?False不包含,这个是false不包含,然后remove u2的时候,你U1也删不掉,删不掉啊,因为他认为U1和U2调ES方法调的是object,比较是内存地址,你这个时候U1呢是扭出来一个对象,U2是扭出来对象,两个对象内存地址不一样,所以U1和U2他认为是两个不同的东西,你加进去U1,你删除去U2的时候,这个size还是一。
06:20
走一下。还是1FALSE对吧,你把这个ES方法给它放开,放开之后发现这个底层在比较U1和U2的时候,他认为U1就是U2 u2就是U1,为什么?因为这次不不比较ES法,不比较E方法,不比较内存地址了,比较的是名字,比较的是这个内容,所以你这个叫杰克,我也叫杰克,那虽然你拗了个对象,我也念了个对象,两个对象都是新对象,但是认为会是会是同一个对象,你懂吗?因为他们都叫杰克啊,U一点ESU2俩是一样的,所以这个时候你把U1放进去了,他问你U1C里边包含不放U2,那就包含了,因为他认为U1和U2是一样的呀,那么如果你删除U2的话,会不会就是代表删除U1的,它会的,所以这个哎,删除U2的时候,这个size就变成零了,删U2那意思就是删U1是一个道理。
07:18
啊来走,再运行再运行你看。再运行山是吧,所以这一块最主要还是想跟大家聊一聊,聊聊一聊什么呢。聊一聊咱们的这个,嗯,Contains方法和remove方法,注意啊,这是测试contents测试谁啊,哎,Remove方法就是测了半天都是为了测试我们collection这个接口当中的这两个方法,一个叫content,判断是否包含,一个叫remove,是删除集合中的元素,它底层都调用了我们的equals方法,所以以后呢,你要注意放在我们集合里面的,放在集合里面的这个对象需要重写equals方法。
08:07
总之还是那句话,各位。还是万变不离其宗,跟我们以前说的那个道理一样,就是equals,你是需要什么重写的?就绕来绕去,绕来去,最后还是绕到最根本的这个问问题上,就之前对吧,哎,对,重写equals是程序员的素养,这句话是很有道理的啊,就走到哪你就重写就完事了,你不重写这个有的时候不好使。啊,有时候不好使,所以说这块要重写ES啊,重写equals方法行吧,那今天的这个内容呢,也算是比较多一些啊,但是今天我就不再布置作业了,各位啊,这个作业是什么,我相信你心里还很清楚,今天晚上。你把这个图给我背会。把这个图给我背会啊,把这两个图今天晚上背会的啊,这是第一个作业,第二个作业就是你自己写点程序,把这个collections collection这个接口里边的方法给我测明白了啊,自己写程序把这个方法给我测明白,这是第二个作业啊,第三个作业要把迭代器弄明白,就是迭代器怎么去遍历一个集合,就是现在我给你一个集合,你往里边放元素了,你怎么一步一步把我这个元素的数据给我迭代出来。
09:23
明白什么意思吧?哎,所以说这块呢,我就总结一下第28天的一个重点啊。总结重点,第一个重点,第一个重点啊,把继承,把集合集成结构图背会,第二个重点把collection接口中常用方法测试几遍。第三个重点是把迭代器弄明白。
10:05
啊,第四个重点,Collection接口中的remove方法和contents方法,底层都会调用equals啊,这个弄明白好各位,今天的这个任务就是这四个重点没了,你不要去弄别的啊,就把这个重点给它弄明白就完事,自己把继承结构图背会,第二个把collection接口里边方法测几遍。第三个把迭代器弄明白,迭代器怎么便利,第四个啊,把这个remove和contains方法啊,调equals这个事儿弄明白啊,呃,明天啊。明天就复习吧。复习吧,啊复习。复习咱这个没什么作业啊,没什么作业,因为这块还布置不了作业,你会这么几个方法,咱们这块布置作业,别的同学不会啊,因为咱们毕竟还有这个集合呀。
11:08
咱们没有,嗯,没有把它讲完,集合讲完之后呢,我才可以布置一些比如说购物车呀,或者什么类似的之类的,对吧,你现在还不行啊,布置不了作业啊,这这块这点的东西还不够,还不够啊,呃,星期一的时候我们就把这个集合讲完了。啊,集合这块就讲完了啊,星期一的时候给大家提前说一下啊。集合讲完之后呢,哎,这等于Java SE当中啊,就是一一大块的东西就结束了啊,结束之后再往后呢,哎,讲讲IO流啊,对吧,多线程啊,反射机制啊,咱们Java SE就结束了,往后就是数据库了,Java就就就告一段落了,往后就开始学数据库了啊。行了,大家休息吧,啊,休息。
我来说两句