00:00
除了数组瑞之外,另外一个常见的集合类型,那就是列表list。关于列表和数组,其实他们可能有很多地方都非常的相似,像在Java里边呢,呃,列表本身是一个三大基本集合类型之一啊,它是一个接口,而数组a list那其实是list的具体的一个实现了,在scale拉当中,列表和数组是两种。不同的集合类型,当然了他们也有关系,在我们前面讲到的集合类型的继承图里边,它们都属于seek这这样一个特征,而sick里边呢,分成了两大类,一个是index的sick AR RA就是里边的一个代表,而另外一类呢,Line linear seek代表就是list,所以list可以认为是一个没有索引的线性的这样一个序列。所以跟瑞相比,那就不能直接用索引去访问里边的每一个元素,他只关心的就是可能头和尾相关的一些操作,如果要如果要想访问元素的话,那就需要作便利操作了啊,List其实使用还是非常频繁的,那同样对于list而言,也区分了可变的列表和不可变的列表,那可变的列表呢,类似于数组,它就叫做list buffer。所以在可变的集合类型。
01:30
嗯,继承图里边,哎,我们发现list buffer和a buffer非常的相似,他们是都混入了buffer这样一个特征的,反而list buffer不再去跟linear seek有关系了啊,所以这里边其实还是稍微有一点区分,我们这里就不详细的去去讲解这个index seek和linear seek的关系了,我们只考虑可变不可变,所以首先接下来我们要讲的就是不可变的list。在skyla的这个代码里边啊,List的这个类型本身默认指代的就是不可变的列表,所以我们可以首先做一个测试,新建一个skyla的object s04。
02:16
我们就测一下list,首先第一步我们还是先来创建一个list,创建一个不可变的列表,我们想到那是不是跟之前一样,我们只要去new一个list就可以了呢?哎,这是直接调用它的构造器的创建对象的方法吗?啊,那我们可以看一下。没有这样的写法,好,大家看到这样写是不合语法的,我们看一下list到底是个什么东西,原来的这个package这个文件里边,把它专门做了一个重定义type,这是对于类型做重定义嘛,当前定义的list其实就是。
03:00
大家看,就是scla collection imutable里边的list,所以就是不可变的表类型,进去我们看一看它具体的时间是什么呢?好在这儿我们就知道为什么不能实现了啊,里边它是一个abstract class,是一个抽象类,哎,所以当前如果我们想想要直接去创建它的对象的话,当然就不行了啊,那当前我们能用什么方法去创建它的对象呢?直接展开看的话,会发现下边有一个半生对象list,哎,那这里我们可以直接调它的apply方法,这里传入一组参数啊,那大家知道传入参数之后,其实底层是一个是一个a buffer嘛,所以这里边呢,最后就是掉了一个buffer的to list的方法,然后转成了一个list啊这里边其实是利用了这个to list的方法做了一个转换,那当前我们就是不能用。
04:01
List真是个抽象类啊,不能用类的构造方法去创建,但是利用产生对象的apply方法去创建啊,那就直接半生对象,后面小括号传入的就是列表里边的数据,比方说23 65 87就是三个数构成的一个列表,那如果我们想看它里边的内容的话,也非常的简单,直接line打印就可以了啊,之前我们也知道里边直接可以做一个to string,把当前的类型包在外边啊,里边的数据用逗号分割做一个输出,我们可以看看结果怎么样。大家可以看到,就直接输出了list 23 65 87,这里需要给大家稍微解释的一点是,有同学可能看到了啊,前面我们在。对应的看到当前的这个list的时候,除了这个半生对象之外,上面的这个list类是一个抽象类,前边还有一个关键字叫做sea sea又是什么意思呢?
05:10
英文这是密封的意思,所以sal class其实就是密封类,密封类呢,它提供了一种约束,就是直接全打包密封在当前文件内,当前类的子类是不能定义在文件之外的,也就是说所有当前这个list的子类只能定义在list.class这个文件内,定义在外边那就不合法了啊,那大家可能会觉得有点困惑,哎,那如果要这样的话。这玩意儿怎么用呢?呃,我我们就是不是就只能用它的伴生对象这种方式去创建了呢?啊,其实也不是,因为它当前这个文件内确实有它的子类啊,我们可以看一眼有什么样的子类,大家可以看到下面有一个哦,这里有一个对象啊,大家看object对吧,这里有一个new new,这里边的extend扩展了list,那这就相当于是它的子类了啊,当然它不是类,它是一个对象object,它是一个case object,然后它是扩展了list nothing,那我们知道nothing是什么都没有嘛,所以直观来看的话,这个ne其实应该是一个。
06:25
是一个空列表啊,那那这个看起来好像没有太大的用途啊,那别的地方还有还有其他的用途吗?还有其他的用法吗?啊,这个其实是。在这里我们可以看到啊,下边还有一个扩展了它的类,这个叫这个比较奇怪啊,叫双冒号。哎,这个双冒号后边extend list b这个这是它的泛型,这看起来是真正意义上。它的一个实现的子类,而且这是一个final case class啊,那关于case class这个样例类,包括前面的看到的case object啊,样例对象,这个我们放到后边涉及到的时候,再给大家做一个简单的讲解,那这里我们只要知道它是当前list的一个具体实现就可以了,那当前是不是就可以用它来创建一个列表呢?
07:18
那这个确实是这样的啊啊,那现在大家可能觉得这个有点奇怪,那后后边我们涉及到这一部分的时候,涉及到添加元素的时候,大家可能会了解的更加深刻一些。
我来说两句