00:00
那么迭代器呢,这个我们就告一段落了,那这样的话呢,咱们基于这个collection collection啊,对于他的一个理解呢,就告一段落了。啊这呢,主要的我们其实就讲了一下collection当中的这些常用的方法,那么由于呢,咱们这个呢,是作为list和set接口的一个副接口了,所以说呢,Collection里边定义的这些方法呢,实际上呢,就适用于这个list和这个set了。行,那么接下来的话呢,我们要讲,那就讲一下具体的list接口它的实验类,在接口它的实验类,然后在这呢,就讲那map就行了,这就我们讲那个顺序了,好,那么下边的话呢,咱们来看一下这个list,那这呢就对应到我们下边的这个内容了,艾硅503啊,打开我们这个内容。那么关于例子的话呢,咱们这一章在讲的时候呢,就遵循着咱们下边写的这个层次,这个第12章呢,咱们就讲这两个层次,第14章的时候呢,咱们再讲这个层次三。所以说这块呢,针对于list的。咱们就讲俩事儿,第一个事儿的话呢,就是这个list里边呢,它的主要实现类呢是a list,咱们就以它为例,看看如何造对象啊,常用的方法呢都有哪些,讲一讲,然后呢,接下来的话呢,我们再来看看它的不同的实现类呢,彼此之间有什么区别。
01:13
在什么样的场景下,诶,我们用哪个具体的实现类说一下就可以了。好,那么首先这块呢,我们来看第一个问题啊,第一个问题就涉及到常用方法,但是在这个之前呢,我们再稍微的多说两句,这个例子接口存储数据的一个特点啊,作为一个回顾,我们也提到了,它是用于存储叫有序的。可以重复的数据。哎,是这样的一个特征啊,然后呢,咱们也稍微的提了一下啊,我们把这个例子呢,它呢可以看作是呢去替代数组的一个结构。啊,使用这个list来替代这个数组。OK啊,咱们也把这个例子呢,称为呢,叫动态数组是吧。哎,这样一个情况,因为呢,数组呢,它也是用于存储较有序的可以重复的数据的。
02:02
啊,这样的去理解的好,这呢是算我们刚才啊一个复习的内容了啊,然后下边这块呢,我们看一下例子里边的常用的方法,常用方法这块你看我写的有两波,这个第一波呢,就是咱们讲的讲的这个collection当中的一些方法。啊collection当中,诶声明的咱们涉及到有15个方法,其实上准确来讲呢,是14个,因为有一个呢,是那个to瑞,还有一个叫泛型方法啊,咱们下一章才讲泛型,所以把那个呢就抠掉了。好,这呢就提到了生命的15个方法,我们还写15个吧,呃,这呢是我们的第一波啊,自然而然的也适用于我们的list。那这块呢,我们发现呢,还有一波。说为什么还有一波呢,这块主要原因呢,是因为我们这个例子呢,它是有序的了。啊,它既然是有序的话呢,它就会有一个序号,比如说你第一个加的跟第二加的,它就是两个不同的元素,我就要第一个,你就不能把第二个给我,那因为呢,它有了索引啊,所以呢,我们在collection的这个基础之上呢,我们就会新增加一些方法。
03:01
啊,在这写一下啊说因为啊list是有序的。啊,进而。啊,就有这个索引啊,进而啊就会。啊,增加一些针对于索引操作的方法。啊针对于啊,增加一些针对针对索引是吧。诶,这个操作的这个方法了,好,那么这些方法呢,具体有哪些呢?诶我们来看一看这个具体的这个课件了,就这块儿呢,我们就找到这个例子了,然后呢,这块呢,是针对它的一个,呃,简单的一个说明是吧,然后下边我们就看一下这个方法了。哎,方法这块呢,说除了从collection这个集合集成的方法以外呢,这块还增加了啊一些这样的方法,这呢,我就把这些呢,诶CTRLC咱们直接粘过来。我就放到这儿了。好,那么这块的话呢,咱们就先不具体细去说了,怎么讲呢,哎,这里边儿呢,涉及到的多多少少呢,可能跟这个,所以呢都多少有点关系了,咱们这样来去整啊,结合着我们前面讲的collection当中的十几个方法,这呢我们做一个小结。
04:07
大家呢,只需要呢记这些方法就可以了啊,类似于咱们前面讲这个string buffer和string时候啊这样的一个思路,直接我就写了叫增。山。改。茶是吧?这个呢,是不是也有插入操作呀。因为你有序了是吧,这块我们就可以来去插啊增删改差差,然后呢长度。然后再加一个叫便利。好,这样呢,我们就讲这几个事儿,大家呢,只需要呢,把这些方法呢,记一下,熟悉熟悉,剩下的话呢,你大不了再查查API就可以了,好,首先呢,这个叫增。增就是添加的意思了,这块呢,其实咱们就把上面这个呢,也都融到里边了啊,所以这块呢,增的话呢,其实就是我们这ad是吧。添加一个具体的元素了。当然了,我们也可以呢,把这个爱的all呢也给它归进来。啊。Collection。
05:00
哎,就相当于把另外一个集合当中元素呢,添加到我们当前这个里边了,是吧,就要艾特all了啊行,这个增山。哎,瑞木咱们呢,讲了一个collection的方法,是不是删指定的元素啊。这块啊,诶那要小心一点呢,就我们这块呢,其实还有一个方法在我们这个例子里边啊,这也有一个啊。这个木的话呢,它是以索引的方式来删的。所以为什么要小心呢?就是你在调方法的时候呢,这个时候你看清楚你要调的是哪一个。哎,我们一会儿呢,有相关的这个呃题目啊,专门就考察这个事儿了。这叫删,好啊,增删修改。改改,咱们在这个collection里边有改的操作吗。没有,因为他也没有索引,你说你想改谁,诶没有索引之说是吧,所以这个改的话呢,我们就在list里边有了。把指定位置上的这个元素呢,我们给它改成一个新的元素啊,也很好理解,增删改查查询。
06:02
啊,拿到指定的这个元素啊,就是我们这个get操作了,咱们在这个collection里边。有这个查询的这个操作吗。没有是吧,咱们在collection这块的时候呢,你只能往里放,放完以后啊呢,你说我想看一看,那你只能是通过迭代器是吧,或者叫增强for循环,你看一看整个的元素,但是没有办法,你说我就想拿某一个元素出来。这个不行。那拿不了是吧。行啊,这个呢,就是在我们这儿可以,因为它有索引之说了。增删改插插入。啊,因为呢,它是有序的了,所以呢,我们就可以呢,哎,插对了。OK啊,那这个插入操作呢,就是我们前面这两个在指定的位置上插入一个元素。啊还可以呢,在指定的这个位置上呢,诶插入多个元素,那么这多个元素呢,就是以一个集合的方式呢,诶放着的。这个一会儿咱们可以测试一下啊,这叫插入操作,然后长度呢,跟原来一样,还是叫size是吧,然后便利呢。
07:05
是吧,呃,这个莱呢都可以用迭代器了,那你list作为它的子接口是不是更可以用了。啊,因为子接口呢,或者我们叫子类只能是在父类啊负接口的基础上呢,功能更多是吧,所以呢,负类或者负接口有的功能它也一定有,所以呢,我们还可以呢使用这个呃,迭代器。啊,使用这个这个方式呢,这个呢是。哎,使用迭代器啊进行便利。啊,那除此之外呢,自然而然的这个增强for循环是吧。哎,也可以,诶我说呀,还有一种方式。那就是一般的for循环。啊,一般的for循环,你看咱们是不是for这块写一个I是吧,这个变量I了,我们这个呢,因为是个例子,有索引了,是不是你这块呢,跟数组一样,可以用这个一般的for了。诶没问题啊,一会儿呢,咱们也写一写好这呢,就是咱们对应的这里边儿的一些方法,那这些方法的话呢,我们可以呢,适当的做一些测试啊CTRLC回过来在我们这个当前的包下呢,诶新建一个list。
08:06
哎,针对他的一个测试。诶,首先诶单人测试方法进来。哎,咱们这儿呢,把这个方法呢,就列到这儿了啊好,那么这块的话呢,咱们就先拿这个list接口的一个主要实现类啊,还是a release呢去理解了。行,那么这个添加的话呢,跟咱们collection里边用的是一样的了啊,比如来个AA啊。啊,这个我们再多加俩。同样的这个123,这还是一个自动装箱。啊,这个再来一个,比如说BB是吧,我们这时候再来一个list点啊,咱们去一个person。哎,Tom诶12岁哎可以了啊好,这个person的话呢,这个我们其实用的这个person了,咱就别往这块去inport了,咱们直接呢CTRLC一下给它粘过来。哎,就用咱们自己这里边儿的,哎,没问题啊。行,OK。
09:00
好,这样的话呢,我就放了四个元素了,然后这四个元素有了以后呢,我们通过list呢,直接咱们做一个c out,这样你说这块呢,我们直接就打印了,其实这里边呢,也是一种便利了。只问的不是咱们自己写的,便利了,那这块密运行这不也能出结果吗?是吧,诶刚才呢,有同学呢,课间写这个代码的时候呢,呃,问这个事儿了啊,实际上这个例子的话呢,我们不是,呃,只要你没写,其实相当于它是不是都是掉的图string呀。对,那这个储存率的话呢,他就想看这个源码,看源码的话呢,这块就按住CTRL键点了一点。减到这儿来了是吧。啊,那这块呢,怎么去理解啊。啊,为啥减到这块呢?因为我这儿写的是多肽是吧。昨天晚上首先呢,你这个例子的话呢,正常来讲,我们这个例子这个接口啊,你点开以后的话,我们CTRL f12这个呢,To string没有。是吧,然后呢,它的这个接口呢,是collection collection这块呢,你F12CTRL f12two string也没有。其实这块呢,感觉还挺神奇的啊。说呢,你看我们声明的是一个接口类型,按说呢,你调的方法呢,也只能是调你这个接口,或者你的负接口声明过的方法,但是你看这块,我们既然可以去调这个。
10:09
啊,那是因为呢,你接口呢,本身也不能造对象嘛,你这块造的对象呢,一定是某一个实现类的对象了,那既然实现累了,它一定直接或间接的去继承了嘛。所以这块你看我一点的话,其实就点到我们这这块。但显然呢,掉的不是这个方法。你想看这个源码,你得去哪找啊?对,你得去A里边去找了,对吧,哎,找进来了,然后这块呢,我们CTR12找这个two string没有呀,没有那怎么办。对,那就找负类呗。点错了啊,那就找负类往上走啊,在这儿是吧,负类呢是它好点进来,点进来的话呢,再CTRL f12,再two three。其实还是没有。这个呢,你看它其实是又调当前这个,呃呃,Abstract list呢,它的这个福利了是在这儿呢啊。在这个里边呢,其实写的这个,你看CTRL f12,你再看这个twoth string是不是在这儿。
11:04
诶,刚才那块它只是链接到我们这个abstract collection了啊,诶在这里边的话,你看其实它还是一个迭代器啊。啊,然后呢,就是一个string build的方式,把这个元素呢,添加到他这里边,然后最后呢,给我们图string一下,就是基本上你也能够想象到它是这样做的。啊,你要你想不到的话,那你就想一下是吧。啊,也就是这样来做啊,好,那么这块我们就回过来了。所以说这块儿呢,其实咱们没有自己写迭代器,但是它底层用的还是一个迭代器啊,OK,这儿呢,我们就是简单来看一看它里边这几个元素,OK啊,那么我们这个release呢,哎,或者说这个类呢,它是有序的,你发现呢,我们在遍历的时候呢,它打印出来这个元素的这个顺序啊,跟我们添加这个顺序呢,也是一致的啊,比如我们把这两个元素呢,稍微哎颠倒一下啊,你再去做运行啊,A呢和BB呢,看就挨着了。OK啊,这是一个有序的一个特性,好,然后呢,我们可以再演示一下啊,刚才提到的,比如我们去插入一个数据哈,这呢我写个二,然后逗号一下,这个写一个CC吧。
12:04
嗯,这是角标零,角标一,角标二。哎,这呢,我插入了一个CC。啊,这是我们打印一下这个list。哎,其实那就是a ABB是不是CC拉。哎,然后呢,这个123呢,就往后排。哎,这样就可以了,好这个呢叫插入操作,刚才我们还看到有一个这样的哈,I有一个or是吧。哎,在指定的这个位置,比如我写个一这块呢,可以放一个collection。啊,我们这块呢,还得新造一个是吧。哎,我在这儿呢,稍微写下咱们测试的是哪个方法啊,方便大家呢去理解。哎,这个咱们测的是它。诶这块呢,测的是这个添加的一个操作。哎,下边我们来测试一下这个操作啊C。好这个,那就期间呢,我们得整一个新的这个,呃,Collection啊这块的话呢,我这样子吧,risk.as list我写个123。
13:02
这个123啊,这个咱们不是讲过了吗。哎,它的这个返回值呢,这不就是一个例子了吗。哎,这位叫LISA1。这个呢,咱没有讲泛型,我就先把它呢给删一下啊,然后在这个位置呢,我把这个这一呢就添加进来了,加完以后的话呢,我们再去做一个list。哎,他的一个便利,哎,走起。你看这时候呢,这是我们,诶在哪呢。哎,这个呢,原来的是我们这个样子是吧,现在我们在这个一的这个位置,就相当于BB这个位置呢,做了一个插入,插了一个123。哎,就这样子操作这块呢,同样的大家得小心一点,就是你要是这样写的话呢。写个一写个LIST1,哎,看着其实也没报错是吧,但是这个跟这个呢,是不是有区别。对这个操的话呢,实际上把这个例子一整体是不是看成一个元素了。哎,因为它其实这块会加一个中括号了是吧。走起。那就成这样了啊。啊,这个呢,跟咱们用这个艾德奥呢,显然呢,它是不一样的啊,这个大家稍微注意一下啊。
14:03
在这写一下,这个呢,是将这个例子一是整体作为一个元素。插入到这个。这个索引一的位置啊。啊G呢,就是我们这个BB的话呢,它就这是索引零索引一,诶它呢是索引二,但是你要用at all的话呢,这个是索引一,这个索引二,这个索引三,它是索引四。哎,就这个道理。好,然后其他这些呢,其实基本上。都还好吧,是吧,哎,这个瑞木这块呢,稍微的看一眼啊,这个大家在用的时候呢,要小心一点。其实市面这块我们就把这个比值题呢,就给说了啊。比如说咱们在这个list,我们到这儿吧,CTRL一下。啊,这么着过来了,现在话呢,我这个list子点啊,我来一个remove remove的时候呢,这块就写个二。我先给你赶紧注释一下是吧。
15:00
要不你都暴露出来了哈,呃,这个二的话呢,你说它是一个对象二呢,还是一个索引二呢。所以那为啥不装箱呢?那装箱有成本是吧。对啊,这块这个二的话呢,你写的就是个数,所以呢,我们优先把它就看作是索引了,言之的话呢,角标零。哎,就是这样,我们再加一个哈,我这写个爱的,我这就写个二。这个肯定是自动装箱了。啊行,然后呢,我把这个位置呢,还得往下放一下,就是我们这个写法呢,到底是把它给删了,还是删的这个索引二。对这个呢,其实就是索引二了,所以你看这块呢,其实也能暴露出来,我们是调的这个index的这个操作是吧,所以呢,这就意味着我们去打一下这个例子的时候呢,哎,其实呢,是我们这个123没了。123美了啊,这个呢是一个移除,那移除完以后的话呢,我们这个二呢,它是不是就往前移了呀。注意啊,就我们现在移完以后啊,然后呢,我们再通过这个绿色点,咱们去get这个索引二的这个元素。
16:05
啊,这个不会说,哎,我把它移出了以后,Get就是个no,不是的,你后边的元素力要跟过来。啊,所以这块我们再去做个运行,其实上就是我们这个二了。那这个一定要注意一下,好,那如何我们想表达的是删除这个数据二呢。呃,这个我们在这呢,是表示叫诶删除索引。啊,二的这个元素。啊,那现在我想删除这个数据二是吧。其实我这个写的叫删除数据二呢,不不够准确哈,这个数据二的话呢,你这看似一个就是基本数据类型啊。那其实的话呢,我们这里边儿呢,放的都是对象嘛。所以你这应该是删除。啊,准确说呢,应该是你这个二呢,包装好以后的那个TE的对象了是吧。OK啊,那怎么去删除这个二呢。
17:04
啊哎,对啊,所以说呢,这块呢,我们要想让它呢,以一个对象的方式去呈现,那你这块呢。就得是让它呈现为一个对象了,但是你这块呢,要直接就写二吧,它优先呢,就会用这个index的这个场景了,所以我们就得自己把它包装成是一个对象是吧。只要他这个对象就行了,那自然而然的,你就想把它包装成个的对象呗。啊,咱们原来提到过啊,JD8啊及之前的时候呢,New一下这是一种方式,但是呢,推荐呢,是不是把它。呃,用底叫VALUE6这个操作是吧。哎,Y6这块你把这二呢放进来,这个时候呢,我们返回的呢,就是一个的一个对象了,其实呢,就相当于你用了一个啊类似这样操作哈,好,那这呢就是个对象了,所以说我们这块移除的话呢,就是移除的这个对象啊。嗯,然后这时候呢,我们再去做一个打印啊,我就list一下。哎,这块我们做一个执行。
18:00
你看这个时候就把这个数据二呢给删掉了。行,就是大家呢,在用这个木的时候呢,有这么个事儿啊,稍微的小心一点啊。好,那么其他的这些方法的话呢,我们就不一个的这样的去做这个演示了啊,因为呢,一看这个名呢,差不多也是很清晰的。啊行,回过来这个呢,就我们说的这个例子里边的常用的方法,诶大家呢,主要是把这些方法呢记一记啊除了这个之外呢,还有一些其他的,你比如说list。那诶当前这个例子呢,调这样的方法,我们可以从这到这儿左臂右开,举这个范围内的一个子例子。啊,还有这个index of是吧,看这个元素呢,在我们当前这个集合当中首次出现的索引。啊,最后一次出现索引。啊,咱们前面讲string的时候呢,这不有类似的这种操作吗。行,这呢,我们就过了啊。好,那么回过来,那么这样的话呢,咱们就把这个list里边关于层次一的这个事儿呢,就说清楚了,诶当然呢,会去用a release告个对象,这样目前呢,我们都是用的这个空餐的这个构造器了。
19:01
啊,那么以后的话呢,我们在开发当中有可能用这个代餐的,代餐这块跟空餐的区别是什么,咱们放到这个第14章的时候,咱们再说啊,诶那么会调用长的方法,刚才呢,增删改差差长度便历啊这块我们也提到了一下,便利这块呢,诶差点意思,咱们把便利这块呢说一下啊。便利。便利的话呢,我们说呢,可以使用迭代器。哎,CTRLC下。把他那拿过来行。哎,这呢,我们就先来便利啊,方式一叫使用。别带气。诶OK啊好,那就直接这个list点,我们还是调这个这两个方法返回呢,就是一个的一个实现类的一个对象了,然后接着我们使用这个啊点叫has next。然后在这块啊,直接打印一下,点next这个操作就可以了。呃,这个呢,大家把它写熟啊,其实也比较简单。
20:03
OK,这呢,就是我们便利的第一种方式。那这就过掉了啊好把这呢注释一下电力方式二。那这个呢,使用叫哎,增强for循环。嗯,这呢,我们就直接来写了啊。是不是又是object?哎,OB接一下。针对这个例子啊。哎,这样的就行啊obj。好,这是我们的第二种方式。哎,也没问题。啊,这个呢,我们也把它注释掉。哎,那么对于这个例子来讲呢,因为它有索引啊,所以呢,我们实际上呢,还是可以使用一般的for循环。啊,一般的。哎,For循环啊,这个呢,直接我就for I了是吧?哎,这个位置的话呢,I小于立点size。哎,对的啊,然后立的点。和钙的方法吗?哎,把这个I呢往这一放,我们就做一个打印就可以了。哎,走起。
21:00
哎,也没问题。行,这个呢,就是我们便利历史的三种方式啊,大家呢,用哪个呢都可以。啊,都可以啊。
我来说两句