00:00
行,呃这呢,关于我们说到的这三个主要的实现类的,它的源码呢,我们就诶说完了啊,那么这块对大家的要求是什么呢?就是大家呢能够,呃主要呢,A list和link list,哎我写的这样的一些文文字的这个内容呢,大家能够去理解,或者说这呢也没啥难理解的,是人家的规定是吧,哎他这样做的我们呢,相当于去熟悉一下,就大家呢,你知道他这样做的一个道理,哎包括呢,你也去记一记啊他啊底层呢,造了一个数组啊,长度是多少,哎什么时候扩容的等等,这个呢,你记记住它啊,记住它啊,就是呢,像这个面试当中的话,其实呢,他可能会被问一问啊,问你这个底层的你了解不了解,探探你的这个技术的一个底儿啊,你要说开发当中,开发当中,其实咱们你不用看这个,你就直接去调方法去去执行就完了是吧?呃,可能没有过多的去关注这个底层怎么写啊,你要是揪这个效率的时候呢,我们才会去关注底层源码了,就像咱们刚才说呢,呃,一个结论呢,就是建议大家。
01:00
呢去用这个代餐的这股道期,为什么呢?诶因为底层呢涉及到又给你扩容了,那就得看源码了啊呃,大家呢,这个下来呢,就是有精历了,你就自己像我一样呢,稍微走一下源码就基础好的同学,呃,记住要一般的话呢,这个呢,建议大家你就把这个release呢里边的常用方法熟悉熟悉,这个源码呢就不用看了,但是这里边我写的这些文字呢,你得能够说出来,哎,我呢开源码是通过源码呢,我去验证我说的这些话呢是正确的啊,要不呢,我口说无凭是吧,那就这种了,那看源码的话呢,呃,咱们那会儿也提到了,在整个我们集格这一章呢,相当于达到个顶峰哈,我们看源码看的会比较多一些,这个源码呢,就涉及到底层的数据结构了,所以这块的代码呢,看起来也会比较吃力一些,嗯,没有几行代码,但是呢会有难度,就像这个,呃,A release里release就是这个link list里边这个node一样。啊,这个node呢,咱们看完它以后,就是你一看到它,你大概得有个感觉是什么?嗯,然后呢,我们再去调这个艾的方法,里边呢,你看它调那个方法的时候呢,诶CTRLL,对,就是这个link的时候是吧?诶我们调这个艾方法是不是在这在这里边呢,你看代码量不大,但是呢,这个事儿做的还挺绕的,嗯,这个呢,其实就是一个算法了,嗯,这个涉及到这块的源码,它确实比较难,所以呢,大家呢,刚开始看不懂也很正常。
02:25
啊也很正常,你不能指望着说这个这个呃,我讲完以后,你现在看的话呢,特别溜啊,熟的不行了都是吧,嗯,那那那不就相当于是我我比如说啊,稍微先刺比一下,比如是张三丰是吧,那我在这打了一套太极,然后呢,你这块呢,看完以后啊,你也马上能打出来,这不大家人人都成张无忌了嘛,对吧,张无忌就一个啊哎,或者再换句话说呢,诶可能这个呢,比如说哎,我我备课还正经都得看了会了,然后我刚讲完大家就全都熟了,你看我得多自卑啊是吧?啊就大家都是正常人啊,所以这个呢,你肯定需要花些时间的啊,很正常啊,但是呢,最基本的一个最低要求就是呢,咱们呢,你得区别于呃其他的一些学生是吧?啊,比如不是在咱这些学生,或者他自学的一些学生底层源码你得会啊,啊你不能人家会调这个爱的方法你也会调,然后呢,大家就读没了是吧?啊你得会看源码啊,这个呢是一个,呃,这个要求更高啊,那接下来呢,咱们就看一下这个,呃,List这。
03:25
关于它们的一些结构呢,我们都说的很清楚了,下边呢,我们关注就是list呢,里边有哪些方法啊,有哪些方法,那这块呢,我们说首先list呢,是咱们collection的一个这个子接口了啊,那既然是一个子接口,那么我们collection当中定义的这些方法15个啊,15个的话呢,这个list呢就都可以用,那么又因为因为什么呢?我们这个呢,毕竟是有序的嘛,有序的就会有所谓的谁是第一个,谁是第二个,谁是第三个,所以说呢,我们这个list里边呢,就会就会额外的加一些关于这种索引的方法,这是collection当中所没有的,因为collection人家还要兼顾到那个set set呢是无序就没有索引了,所以你不可能在collection当中加一些带这种索引的操作了啊,那这呢,我们就把这些方法呢,CTRLC诶拿过来,咱们呢,做一个测试啊,做一个测试这块面试题啊,这个我就接着往下走吧。
04:22
哎,这呢我们写一个五,就是我们list接口中的常用方法,哎,常用方法这呢我们在下边呢做这个测试,诶CTRLV啊就把它拿过来,这呢我们写一个单元测试方法。他。哎,这么着啊,嗯,这块呢,咱们要一会执行代码呢,因为这个咱们是粘过来的,它里边你看老是报这个红线啊,因为我们要跑呢,这块也会报错,所以这块我们就ctrl a全选一下,给大家都注释了啊啊就不看了。
05:00
啊,这样我们一会跑的话呢,就不会受这个影响,就执行不成功了啊,那这里边呢,我们去演示一下常用的方法,除了咱们在collection当中定义的那些方法之外,这呢又增加了一些方法,那这呢,我们就比如按照这个顺序呢,做一个简单的演示,咱们首先我就以这个release为例了,因为它是比较常用的一个实现类。行,诶这呢,首先首先这块涉及到一个ADD,这呢其实就是一个插入操作了,插入操作咱们得先整几个数据啊,点ADD,这让我们整几个数据,呃123来一个,诶456还一个这个AA来我们去new一个person。Person呢,比如叫Tom,诶12岁行,那我们这个list当中呢,是可以存放相同数据的,那比如说我在这儿再造一个456,把这呢我放到末尾,好就这样来写,哎,这是我们当前这个list,当前这个list呢,我们先简单的去做一个输出啊,里边呢调它的twoth string,其实呢,也就把这几个元素给我们都遍历了。
06:11
啊,这呢就出来了,这时候呢,我们看到你输出的这个顺序呢,其实就是我们添加的一个顺序,是一个有序的行,在这个基础之上,我们下面来谈它这个方法,首先第一个呢叫A啊这个CTRLC一下。你看这样啊,添加这个添加呢,其实是一个插入操作,我们这个list点艾,这呢我写个一吧,这呢我们后边来一个,比如说BB,相当于呢,把这个BB插入到索引式一的位置。啊,那你插到一一的位置呢,那我们再去看一下这个list。那那就会出现这样情况,那整个呢,后边这个数据呢往后移,然后BB呢就插入进来,这个底层大家是不是就知道咋做的了,对咱们这用的是list啊,是不是就一个一个往后移啊,都对这个往后串啊,哎,然后呢,把这个空出来,这样那你要是link的例子呢,就不一样了。
07:09
那底层咱们都说过了啊,不多说,嗯,下一个呢叫做艾奥,艾奥呢就是在这个位置呢,我们加入了一个collection。哎,CRLC,哎,这个方法啊,那么我们首先需要有一个这个collection,那不妨呢,我就这样了啊,咱们也说过叫点as list了,这呢我们写上一个,呃,123写这样的三个数啊,Al enter,得到一个list,这个叫LIST1了,这个呢,没有见过泛型,先干掉这样,那么当前我们这个list点我去做一个叫ADD all。把我们这个LIST1呢放进来看,这样子。把LIST1放进来,这块的话呢,我们就先简单的看一下什么呢?我们这个list.size啊size这是一个两个三个四个五个,这加了一个六个是吧,这六个你说这块呢是几个。
08:08
是不是应该是六加三呀,哎,六加三,所以这个,哎六加三,所以这个呢,应该是九个啊,就是把我们这个集合当中的所有元素都添加到我们当前这个集合当中,那就一个一个的加啊,这呢一共是九个啊,九个元素成,那大家小心一点啊,小心点什么呢?我这叫爱奥,你别呢,一不小心掉成谁了,掉成他了。掉I的,我把这扔进去发现诶也不报错。有区别吧,区别是什么呀?哎对这个的话,你是不是把这个整体当成是一个元素了啊,那这就成了这个七个了,哎就成七个了啊哎这个呢,要小心一点,就看着你到底你是想干什么啊,你到底是想把这个里边的元素都加过来,还是说呢,把它看成一个整体,哎这个呢,哎你自己决定啊,小心一点好再接下来叫get,哎我们呢,能够往里边呢,去这个一个一个的去添加,按照索引去添加,那我就可以按照索引呢去获取,诶这呢就相当于是一个获取的操作了啊,比如我们去获取一下,点get一下,哎第一个位置的,哎第一个位置的元素啊,就是零。
09:27
嗯,这个呢,也比较简单。第一个123啊行,那么再接下来叫index of啊,这个也比较长了,不妨我们再去新建一个啊。哎,这个呢,我就倒这写的,这是TESTS1,这呢写test词二还是呢,我们先造一个list。哎,拿过来这时候呢,我们叫index of啊前面我们讲string的时候也说过,所以这块呢,诶其实就类似的这样操作了,判断我们这个对象呢,在当前这个集合当中首次出现的索引位置。
10:03
啊,基本上跟我们说的那个string是完全一样的,只不过string呢,它这是一个词符串啊,那list点我们叫index of,我们写一个数六。Enter,得到一个index。哎,我们输出一下这个index。来执行,那么如果你要是有我呢,就把你首次出现的一个索引呢返回啊这呢就把456呢就返回了,那如果要是没有。没有呢,返回多少啊,返回负一,所以呢,在这个设计上呢,跟这个润啊也是一样的。啊,这呢,就我们这个叫index of啊这个操作。哎,这个操作啊,首次出现的这个位置后边呢,大家看到只要在Java层面涉及到这个index of,只要你找不到的话呢,它的返回值基本上都是负一了。啊说如果不存在,哎,返回负一。
11:03
哎,就这样的一个逻辑啊,相当于语言设计上的一个逻辑了,那么这叫inex,下边呢,Last inex。哎,就是哎,最后一次出现的缩引位置,所以这个呢,大家也不陌生啊,也应该都很清楚了,我直接呢去调了list点,叫last inex of,我再写一个塑料,哎,就是它了。哎,这个呢是四啊,这是呃,这是角标01234,哎,对的。那这个也一样啊,说如果你要是找不到不存在返回值呢,是负一行,这个都比较简单了啊,再接着呢,有个。Remove这个时候呢,大家要小心一点,咱们在讲collection的时候呢,是不是说过一个方法叫啊咱们那个remove呢,是不是删的是某一个元素啊。哎,你看咱们讲这个。Collection,呃,哎哎,这爱的瑞remove,你看这这呢,相当于是我们在例子当中呢,又提供了一个重重什么的方法,重载重写。
12:14
啊,重启啊重启啊,啥叫重启啊,重启你不就把那个方法覆盖了吗?这这覆盖了没有,相当于重载呗,对吧?诶方法名一样,形态列表不一样的,这不叫重载吗?啊呃,这个瑞呢,也可以按照这个索引去删,也可以按照对象去删,这个大家写的时候呢,要特别的小心啊,特别的小心,这个我们是按照这个索引删的CTRLC啊。哎,这个remove,那么咱们当前这里边也没有涉及到这个对它的这个修改了啊,只是做这个判断,我们做一个remove操作,这里remove你看这不两个吗?咱们用这个,呃,按照这个索引的啊,比如我想把这个第一个元素干掉,呃,第一个这这这第二个元素了哈,七个零,这就把第一个元素给干掉了。
13:11
哎,这个呢,你看还有一个object。关心一下,说这个是什么呢?我们可以呢,去输出一下是吧?啊一方面呢,输出这个obj,另外一方面呢,我们,诶顺便呢,把这个例子呢,重新再去这个打印一下得了,诶我们看这obj是什么,你猜一下它是什么,对,是不是就返回你山的这个位置上元素啊啊因为它别的好像也返回不了啥了,是吧。诶看一下啊,本身呢是这个呃list,然后我们现在呢,把这个首元素123删掉,那返回到果真是删除这个位置上的元素,呃,那么删完以后,哎,那这个456它呢,就现在是我们的第一个元素了,这呢就删除你得后边一个往前移,咱们已经讲过这个源码的一个情况啊,哎,这个都清楚好,这个呢叫remove过了,下面这个呢叫set。
14:06
Set呢,就是设置。哎,这呢做一个设置操作,比如说我们这个list点我们做一个set,咱呢把这个索引是一,这个位置上元素呢,我改成是一个啊CC。然后我再做一个啊输出啊,咱们上面刚刚输出完,然后呢,我就改了以后,你看这个元素的这个值是不是做过修改。哎,这咱们呢,哎,刚才上面这个,然后呢,我把这个,哎,所以呢是一,那就这是零,这是所以是一把A呢改成了CC了,那这就是个S方法,那其实也非常简单啊。Set完以后,下边还有一个方法呢,叫做sub list。啊,大家呢,在string当中见过sub string,那你呢,其实也基本上就能够知道啥意思了。相当于提供当前list的一个子list,从这个开始到这结束,同时呢,你通过这个经验上来判断是不是应该包括它不包括它吧,诶是这样子的啊,从这到这儿位置的一个,哎,我们准确说叫左臂右开区间的这个子集合啊呃,那我们这呢子集合目前的这个集合呢,现在长得是这个样子的,呃,1234,我现在呢,想把这两个元素呢获取出来。
15:33
List点叫sub list怎么写二。是不是得撕了,哎sub list这个时候呢,我们list完以后它得返回啊,你得到的这个呢,才是一个你想要的这个子list,哎,得到这个才是那本身这个list有没有变化呀。没有来我们之前看一看。
16:03
哎,这就出来了,这呢是我们打印的,你这个叫sub list,这呢这不就拿到后两个元素了,然后本身我们这个list是没有变的。呃,这个呢,要注意一下啊,就是它不会对我们本身的这个绿色造成影响,返回值是你想要的。
我来说两句