00:00
那好了,同学们,那咱得继续往下看呀,因为我们刚才讲解的是我们这个collection接口当中的常用方法,但是这个常用方法好像没讲完。好像是没讲完啊,各位,为什么呀?因为这些方法我们都讲了很多,但是其中有一个方法叫特瑞特,看见没有。就这个这个方法,它返一特瑞,返回一个一特瑞,你看。是不是调这个方法可以返回一个eter是不是好,那么这个方法呀,是不是从负接口中继承过来的collection呢?它所有超级负接口叫eterable特,Able里面是不是有个方法叫eter返回一个E特,实际上这个方法被我们的子接口给继承了,Collection这个子接口继承继承超级接口里边这个方法,所以collection里边有一个什么哎,叫做it的这样的一个方法,就像我们图上这个接口是一个terribleable,然后呢,我们这个接口继承了这个接口,把这个接口里边这个方法继承过来了,那我这个集合能不能去调你这个方法呀,我这个集合调你这个方法返回一个什么一特。
01:07
明白吗?我这个集合去调你这个eer方法,返回一个eer。明白吗?有同学老师我返回这个一干啥呀?我是为了拿到一个迭代器,其中这个eer就是个迭代器,有同学说老师我拿这个迭代器干什么呀?哎,我拿迭代器的目的就是迭代集合,迭代集合是什么意思啊哎,便力集合,便集合中的元素啊,迭代集合就是便力集中的元素,就这个意思啊,那么这块咱们就可以啊继续往下演示一下各位啊,还是collection这个目录下或者下我们新建一个class,我们叫collection test02,然后我们回车之后我们在这个地方我们讲一个专题啊,关于结合便利或者叫迭代专题,各位啊,迭代专题分开我们去看一看,第一个呢,就主要是讲一讲普遍常用方法,第二个主要是讲一讲什么迭代器的问题。
02:05
那么注意啊,此当前讲解的这些迭代器的这个东西啊,它适合于所有的集合。除map之外。注意啊,这种便利集合的方式是通用方式啊,注意以下讲解的便利方式或者叫迭代方式,是所有collection通用的一种方式啊,一种方式在map集合中不能用啊,不能用在所有的collection以及子类中使用。啊中使用,所以这个专题是重点啊,重点五颗星12345。啊,五颗星各位啊,这是个重点。那现在呢,首先第一步你要迭代集合,得创建集合对象吧,是不是,那就是collection呗,是不是collection等于new一个什么呀?Aist对不对,我们这次换一个吧,你用一个哈西赛行不行啊,随便写的各位啊,随便写的好了,这块的话,这个泛型到以后再说啊好了,这样的话我们再直接给它导进来就行了啊把它导进来,Collection有了,哈西赛有了,无所谓,后边这个集合无所谓,主要看前面这个接口啊,后面的集合无所谓啊,主要主要啊是看前面的collection接口,接口啊怎么便利或者叫迭代啊来添加元素,怎么加ADD是不是ad,然后加一个ABC,再加一个DEF,再加一个嗯。
03:54
100,然后呢,再加一个object,好,我往集合里边加了很多元素,接下来我们是不是便利对吧,对集合进行电力或者叫迭代,那么这个便利迭代首先第一步是获取集合的迭代器,获取集合对象的迭代器对象。
04:19
叫做eater啊,来怎么拿c.iter这个方法返回iter,这就是一个迭代器,各位这就是那个迭代器啊,来奥回车导这个类,这个类就拿到了,这类就拿到,这就是迭代器,我们完全要靠这个迭代器干什么呀,来去迭代数据的这个集合,为什么可以调这个方法。因为你集合集成了这个接口,这个接口里边有这个方法,所以你集合可以调这个方法叫特,调完E特返回一个迭代器,迭代器里面有三个方法。Next remove有三个方法,各位有三个方法啊,通过这三个方法来完成集合的。
05:01
你现在拿到迭代器了呀,拿到了一个迭代器呀,第二步是什么呀?通过以上获取的迭代器对象开始迭代便利集合。这个为什么说五颗星重点,因为以后的开发中一般都是往里边放东西,然后最后拿出来。你怎么把集合里边一个一个一个一个一个一个给我取出来呢,哎,你就需要使用什么呀,迭代器。你需要使用这个迭代器,明白什么意思吧,你需要使用迭代器去一个一个迭代,但你第一步你先把迭代器拿到啊,调集和对象它的E这个方法返回一个迭代器,拿到迭代器你才可以迭代,那么迭代器里面有这么几个方法,我需要给大家讲一下。那么这个迭代器里边有什么方法呀,我们点过去看看呗。就这个ER方法,返回ER吧,这是个接口吧,里边是不是有三个方法,你看就这三个方法,你拿过来啊,拿过来,然后呢,我放哪呢,我放这儿啊,来来返回一个object啊,这是object来。
06:12
走。这个remove就不用看了,Remove的话到时候咱们再说啊。第一步是获取我们集合它依赖的迭代器对象。有了迭代器,我们通过这个方法和这个方法,注意啊,以下两个方法,以下两个方法是迭代器对象比特。中的方法这个和这个。啊来,那么接下来咱们看一下啊,咱看一下看一下什么呢?哎,我给大家讲讲啊,这个迭代器到底是个什么东西,我画个图吧。
07:00
因为这个比较重要啊,所以呢,咱们最好谨慎一些,大家呢也集中精力去听一下啊,现在假如说这个东西就是一个集合。这是个集合,各位啊。嗯,我看看啊。这个集合好像这么画不合适。嗯,怎么画比较合适?我想想啊,这么画吧。这么画啊?嗯。来,就把它想象成数组吧,哎,这么一个东西啊。你在你的程序里边是不是会掉一个方法叫ad啊,是不是添加元素啊,是不是哎会添加元素啊。大家注意听啊。呃,加元素呢,实际上是我好好画嘛,这个图我觉得还是有必要去保留一下。新建。保存一个保存一个啊,好好画一下。嗯,放到哪儿呢?放到这个课堂画图,这今天是第28天。
08:01
28呃,迭代集合的原理。啊,迭代原理。怎么画吗?说话啊。嗯。这个我先删了。来。再来。好就这个意思啊,然后呢,这就是那个集合,假如说。几个对象啊,然后调I的方法,往里放了个ABC。放了个ABC啊,放了个ABC进去,那么这块呢,可能就是一个ABC了。ABC啊,这样同学们,咱们呢,把这个再改一下啊。改成什么呢?因为我现在毕竟怎么着呢,毕竟是。
09:07
我这个毕竟是什么呢?毕竟现在是看的像数组是不是,哎,所以我就改成a list啊,改成a list,你先用它啊,这样好理解一些,然后这块呢,它添加了一个元素之后呢,紧接着这个程序往下走,它又添加了一个元素叫DEF是不是。对吧,哎,DEF啊DEF。就这么画吧各位啊,实际上这个图并不是这么画的,里边并不是存在ABC吧,是不是存ABC这个对象内存地址放进去啊?就简单这么画吧啊,知道这什么意思就行啊。来。这样画不太精确啊,就先这么画了,第三个是100吧,我就直接画了,各位啊,来从这100吧,好,紧接着呢,再往下丢了一个什么object,是不是扔进去了。实际上这种画法不太精确啊,不太精确个。
10:00
里边不能存对象的啊,不能存对象的。知道是这回事儿就行。New object。放进去好,那么现在呢,这个集合对象叫做C是不是?对吧,我们再回看一下,然后呢,这个几个对象调是啥意思,拿到一个迭代器,好,我们这个迭代器是个什么东西,记住啊,迭代器就是德。这就是迭代器。现在的这个箭头就是那个迭代器对象。叫迭代对象。明白吗?这就是那个迭代器。啊,那么这个迭代器呢,它是干什么呢,它是。负责干什么呀?电力集合中元素的。啊,负责便利或者叫迭代集合当中元素的。
11:00
明白吗?啊。那么我们呢,有什么方法呢?大家看这个有一个迭代器,里边有个方法叫亥斯耐克斯特。害死是有next是有下一个,如果仍有元素可以迭代,这个方法将返回处。迭代器最初并没有指向第一个元素。各位。注意啊,迭代器最初并没有指向第一个元素啊,注意,迭代器eat最初。并没有指向第一个元素啊,并没有指向第一个元素。并没有在这儿各位啊。迭代器最最初并没有在这个位置上。在这。那么我们迭代器里边有一个方法叫汉斯耐克斯特,这个方法返回布尔类型has next。
12:09
就这个方法返回处。表示还有元素可以迭代。这个方法返回false,表示没有更多的。元素可以迭代了,这就has next。这个方法的一个作用。啊,我放到这儿。那么它除了这个方法之外,它还有一个方法叫耐克斯特,是返回迭代的下一个元素,记住啊,这个next。会让我们迭代器干什么,往下走一个。
13:01
往前走一位,并且。返回它指向的元素。注意啊,Next就是返回一个object。Object eat.next这个方法,它这个方法是干什么的呢?这个方法让迭代器。前进。一位。啊,并且将指向的元素返回,或者叫拿到。那么大家看这个方法的返回值就是一个。明白吧,那么这个时候假如说我们这两个方法配合起来,一个叫has next有没有啊,有有的话怎么着啊,Next一下。有没有啊,有的话一下,所以上来会。执行第一个就是他。
14:02
下面有没有啊,你看这个下面有没有有。有的话,调next的这个方法是不是可以让我们的迭代器往下走一位对吧。那么这个迭代器指向这个位置之后,它会怎么着?返回我们指向的这个元素,它指向ABC,就会把ABC拿到。那么紧接着他还会去调用这个方法。那下边有没有啊,哎,下边有,那么这个时候我们再去调next的方法,那么这个时候我们的迭代器会往下再走一位。当调用next方法的时候,它会返回一个我们所指向的元素,叫做DEF。拿到这个指向的元素,那到拿出来之后,接下来它还会判断下边有没有元素,下边还有没有啊,有有的话,那么这个时候迭代器怎么着啊,再调用next方法,然后我们再拿到我们指向的一个元素,这样的话返回来是什么呀,就是100。
15:04
那么这个箭头就是迭代期,各位,这就是个迭代器对象,现在在程序里边这个E特,这个就是代表的这个图上的迭代器对象。啊,迭代期对象,那么接下来呢,我们还会再去调用next,有没有有没有,有的话继续next,那么这个时候我们是不是还会往下再走一个呀。再走一个,他这个时候会拿出来谁呢?哎,指向了这个元素那个object对象。那么这个时候呢,我们到这儿取出来奥债之后呢,再往下我们还会紧接着掉这个海斯奈克斯特,它下边还有更多的元素可以迭代吗?此时这个返回值就是false了。False之后我们循环就结束了。循环结束。各束。所以这样的话,他就可以从头到尾把元素都给它取出来啊,都可以取出来,那么你写代码可能是刚开始得这样写,对吧,你拿到一个集合往里边添加元素,然后呢,你拿到它的迭代器,拿到迭代器之后呢,你在这儿干什么呀?哎,给它。
16:12
迭代呗,对吧,海斯奈克斯特对吧,如果。返回普尔类型呗,Has next是不是啊,集合容量是无限的嘛,是无限的啊,可以自动扩容来,你不用管这个啊,来再往下has next这个值,如果为出好,我问大家是不是耐克斯的一次取出一个数据啊。你看看这个代码是不是这个意思,取出来的,不管你存进去是什么啊,取出来都是object。注意啊,就是不管你当初存进去什么,取出来统一都是object啊,不管你当初完了存个字符串的数字还是个object,它总之取出来就一定是个object。
17:09
来这是一个,你想一想程序是不是应该再往下走一步啊。再去调还有没有啊,有的话,哎,我们是不是再取一次啊。对吧,哎,那我问你再往下是不是,哎,它有没有这个下一个,有下一个的话,我们再取一次吧,哎,他还有没有下一个呢?哎,如果有的话,我们再取一次。是不是,哎,如果有的话,我们再取一次。是不是,哎,你看。就是这样的。啊。有没有下一个,如果有取一下,有没有下一个,如果有next取一下对吧,如果有,哎,取一下,如果有取一下。那么这个时候呢,我们来看一看啊,这个位置has next我们输出一下,这个位置也输出一下,这个位置我们也输出一下,这个位置我们也输出一下,这个位置我们也输出一下,我们来看看啊,那它内部指针怎么个原理,内部指针怎么个原理,这个不需要管。
18:14
你你管他怎么移动的呢,它总之你调next的方法,它就可以往下走,就可以往下走,其实就是索引啊,就是索引下标。啊,他都都有自己的方式,自己的方式啊来走一个。处有没有啊,有取出ABC有没有啊,取出取出DF有没有啊?有取出100有没有啊,有取出对象object对吧?再往下有没有啊,没了。对吧,哎,再往下最后一个是不是没了一迭代器,还是那个有没有啊没了。False啊,这个是false,这个就不执行了。对吧,所以说这个程序的话,我们应该使用循环。对不对,哎,你想想是不是应该使用循环整个这个代码。
19:03
是不是应该循环代替啊?什么循环呀?While循环it.has next。eat.next会取出一个object。然后输出你看这个代码这样写是不是就可以了。对吧,你这一块有个集合,往里边加了这些元素,然后拿到迭代器之后在这写一个循环,如果它为处,是不是就代表有下一个,如果有下一个是不是进到大括号里边去取出来这个。然后我们这执行结束之后,是不是又进入下一个循环。对吧,哎,进入下一个循环,如果再有的话,我们在这是不是再取一下,直到有一天我们这个呢,结果是false。对吧,哎,结果是false为止。
20:00
啊来,我们直接点右键,我们执行一下。来看看这个是不是就取出了集合中的元素啊?这存这样存啊,这样存的。是不是,哎,这样取出来就可以了。好了,这个我们先说到这儿,先休息一下啊。
我来说两句