【字幕】恋上数据结构与算法之016动态数组04clear

所有的元素,你觉得这个清除的所有元素怎么做?同学们在我们目前的情况看来,一句话就搞定,一句代码就搞定,一句代码就搞定。刚刚有同学提到重新创建这个数组,没有这个必要,太浪费了,没有这个必要,真的没有这个必要,直接size等于0就可以了。为什么呢?你想想,因为你只要size等于0,你只要size等于0,别人get的时候是不是就是拿不到之前那些元素的?

因为有些同学可能会想怎么想呢?比如说啊你看啊我我之前假设里面放的有数据,我之前里面放的有数据对不对?好,那你现在别人调用了这个颗粒啊,那颗粒啊不就代表把所有数据删掉吗?那把所有数据删掉是不是需要把他们都给挖空呢?不需要不需要你想想,你只要size等于0就可以了,为什么?

因为只要你size等于0,你思考一下,不管不管别人是钙磷还是钙磷,甚至是钙二32,他都无法访问你之前这些数据的,为什么?因为他调用这个get跟set的时候,我在里面都做了拦截,只要你是大于等这个size的直接抛异常,所以相当于就是只要你把这个size给控制住了,把size给控制住了,别人就根本没办法去访问你之前的那些残留的数据。

所以对别人来说,同学们对别人来说是对这个对这个偶然类似的,对这个动态数组的使用者来说,在他眼里你真的清除掉了,其实我里面是没有清除的,只是塞子的问题,但是在他看来,他使用盖使用塞的时候给他感觉就是清楚了,所以这个我们自己写的框架,我们自己写一个类是提供给别人用的,我们自己内部怎么实现,别人不用关心,但是我们只要保证别人在使用我们接口的时候,语义是正确的就行了。

什么叫语义正确?他使用的可利啊在他看来就真的要清空,到时候他get set就无法无法get无法set,这个叫语语义正确就行了。

所以这个框架内部怎么设计的,跟外面怎么使用的是两回事。好,有同学又说到这,你这不是浪费内存吗?不是的,这怎么可能是浪费内存呢?因为你思考一下,你难道可列完之后你就不用往里面加东西了吗?你可列完之后你就不用往里面加东西了吗?你想想鼻炎颗粒丸下次肯定还要往里面加东西的,比如说来个爱的10,或者说来个爱的99,来个爱99怎么做?

很简单,这个时候你只需要将99覆盖掉这个位置就好了。

然后呢这个时候我们塞子里面的塞子加价,说白了塞子现在是变成什么?说白了塞子是变成了一,既然塞子变成了一,也就意味着别人能访问的范围就是这个后面的这些数据他根本访问不了。还有如果这个时候他再来个艾达88思考一下很简单,这个时候我只需要再让塞子再加价,并且把88这个东西放到这个位置。

由于我现在塞子是什么呢?所以它能访问的范围就是前面两个,后面的数据他根本没法访问,所以在我的这个动态数据的使用者角度,在这个框架的使用者角度,这个size真的是二,那为什么有同学说是浪费呢?这不可能是浪费,为什么?

因为你这些空间后面还是要用的,而且你在思考1个问题,那为什么一开始的时候我一开始就申请了10个,这10个一开始都没有用到,你不说浪费呢?所以这个根本不叫浪费,因为你这个空间迟早要用的,那有同学可能会会说唉那你可内调以后后面也不一定会添加,那行吗?好,那后面不一定要添加,那你就把它删掉那也行。

你就直接将这个什么直接将这个东西清掉那也行。但是你下一次如果又要添加的话,你还不是一样,还是用另一个数组又要向堆空间申请空间,你也知道申请内存空间跟销毁内存空间是要浪费时间的,是要浪费性能的,那我们还不如就把这个东西反正你都要用,我们先留着,我们先留着,我就不去销毁内存,你不去销毁内存就意味着下次可以重复利用,你也不用再申重新申请空间,销毁内存跟重新申请内存是还要耗时间的,所以清掉才是浪费性能。

所以同学们没有这个必要。

所以很多时候我们框架内部怎么设计,跟外面语义是什么?可能不太一样。比如说外面的语义是清空,在他看来是清空,我们不一定要就要清空,你没必要按照他的角度去设计问题啊,没必要按照这个框架使用者普通开发者的角度去思考,这个是清空,你要考考虑清楚,我们现在是框架设计者,我们在设计一个第三方框架,别人是在用我们东西,那么我们内部是怎么设计的,可以由我我们自己来决定,没必要按照别人的角度去设计,这个是这个东西。

好。啊这个问题你可以自己考虑,可以自己考虑,可以根据实际实际需求去做,对吧?比如说你这里也可以怎么做呢?你可以判断清空,如果对吧?如果这个size是小于100的,如果这个size是小于100的,我就这么做,如果塞子是大于100的,呃留着100个有点浪费那行吗?

那这个时候你就讲艾利曼是清空,这个是你自己的事情,就是你想怎么设计你自己定好吧,因为我们现在是游戏规则的制定者,这个框架是你设计的,你想怎么做就怎么做,明白意思了吗?同学们?嗯嗯。这个你自己去做啊。

那关于这些所谓的细节,刚刚有同学问到了为什么不清空等等,这些问题在我们以后课程中会经常遇到,所以我们讲解这个数据结构不仅仅是告诉你这个数据结构怎么设计,还会告诉你我代码为什么这么写,这个其实都是跟性能有关的,啊所以同学们以后上课多提问多认真听啊好吧?

我们现在在干什么?我们现在其实就在设计一个框架,我们现在就要设计一个框架对吧?我们是框架设计者,我们不是这个框架的使用者,我们我们内部的设计跟外面的语义是可以不一样的,我们只要保证外面的语义是正确就可以了。

然后同学们我把它这个清空,然后啊然后还有这个东西没有没有没有做到这个添加,对吧?还有往这个位置添加删除,要这个东西怎么做,同学们可以自己去思考一下。然后你想想你不断的往上面添加,容量肯定不够,是不是肯定不够啊?因为一开始你只搞了10个,你搞了10个,那你不够那怎么办?扩容怎么扩容?我在PPT里面也有说同学们可以自己去先预习一下,要把这个代码先写一下。

那么同学对于我们今天内容有什么问题,今天我们讲了这个复杂度跟动态速度,按照我们的课程计划,其实今天只是讲复杂度的啊,今天应该是讲复杂度,你看讲复杂度,然后我先说明一下,我们后面讲的这个课程跟这个标题不一定完全对得上,为什么呢?

因为有时候唉今天这个复杂度时间太短了,我们就直接把后面东西往前讲,或者有时候这个动态数组我讲东西太多了,那可能时间不够,可能下一天也是讲一些动态数组,是有这种可能,同学们先注意一下,我们要做的不是赶课程,不是说啊这个一定要保证今天讲完不是这样子。

我们保证质量相当于就是我要保证我想讲的东西,我想传授给你的东西要讲完,如果我们的时间唉到最后了还没讲完,没关系,我们补课嘛。我们补课嘛。就是我要保证的事情就是同学们有什么问题我给你解决啊,然后我要讲的东西,我想表达的东西我要表达完整,所以同学们需要注意一下这个问题好吧?

看一下有什么问题对于我们今天的我相信今天的问题同学们应该都没有,对吧?因为太简单了。

第二个实现可以再好好看一下代码,然后再好好听一下,反复听一下这个视频。地府这个东西呢这样子噢,我们第一季不会讲我们第一季主要讲什么东西,同学们看一下课程大纲这个位置,我们第一次要讲的东西我都列出来了,第一级是打基础,有这些技术我相信能应付很多面试的,比如说他问你什么红黑素什么二叉树,那简直是切菜,呃时间不一定是连的啊,我们要讲完这个线性表,最起码要把这个队列讲完,我们开才开始会讲述。

那讲完这个队列以后,我就带着同学们来爬树了啊开始上树,每一季是分开的,每一季不一样的,不过我们第二季第三季肯定是很很便宜的,因为第一季最重要,我觉得第一季最重要啊类的客户地址是这样,我觉得啊如果你的数据比较好看,而且也比较勤劳,上面的数据还可以,我觉得去贴一下吧,但是我觉得贴了也没什么意义,因为可以作弊,不过呢不懂的人你可以唬一下是吧?

他不知道这个东西,不了解这个东西,唉他一看你还有算法网站啊还在上面做算法练习,数据也比较好看,那你可以贴,贴了也证明你关注算法吧,好,同学们10点多了吧,没什么疑问是不是?如果对今天的东西没什么疑问,那我们就就今天就先到这。

那我们下星期二是吧?我们继续我会把这个PPT啊注意啊还有PPT我说明一下,这个PPT呢我会提前发放一些给同学们,但我并不是所有发放,为什么?因为我的很多PPT都在改进当中,相当于比如说红黑素,虽然红黑素PPT我已经做完了啊你看已经非常非常的丰富,而且也做了很多动画在里面了,但是呢我会不断的去看我的PPT,不断的去完善里面PPT,所以我肯定是觉得完善的没有问题我才会发放。

一般来说我会发放前面几个给你做预习用,然后又要上后面阶段我又会发放几个给你做预习用啊,第一季的话都是由我讲啊打基础都是由我讲。另外一个老师是跟我一起设计这个课程,比如说课程案例啊等等,第一季全部是由我讲嗯。我看一下啊,微信群发放,一般来说我们会传到那个腾讯课堂,腾讯课堂,比如说课程概述,最下面一般来说它就是拿来放最下面啊,最下面这个位置它会有一些课件,就等我们上传。

这个设计的话我觉得挺傻的啊,就腾讯课堂它就把它放到后面,它不是最前面哈。数据库数据库用的币数,我们会讲到币数,专门讲算法是在第二季,第二季我会专门讲讲算法,他说还有什么疑惑对我们这节课都刷花了,那应该是没有了。

同学们那我们今天先到这啊,然后把把我们刚才没有完成的这几个接口添加删除给实现一下,然后再回来看一下我的实现跟你的实现有什么差别。

同学们,我们啊我们不是讲Java,我们不讲jbm同学们下课吧好吧?视频我们今天弄完,最快也是明天后天上传了好吧?要究竟用什么编程语言实现,你自己去实现好吧?我们虽然用Java讲,但是呢你可以用你自己熟悉的编程语言去实现,如果我用Java,但是你用别的语言实现一样的效果,那说明你真正掌握了好。

同学们下课吧,同学们晚安啊,下周见。早点休息,每天讲完课。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值