00:00
我们已经了解了scla集合类型系统,那接下来我们就要针对常见的集合类型一一做一个具体的了解了。首先我们要介绍的就是最常见也是最简单的几何练习数组,那这个大家都不陌生啊,应该很熟悉了,所谓的数组其实就是按照顺序保存的一组数嘛,呃,我们也知道在计算机底层,其实数组保存起来就是那一块连续的内存空间里边啊,然后里边存放的应该都是相同类型的数据,所以每一个数据呢,占据的空间都是一样大的,那这样的话我们按照次序。一个一个,把它们放在这个连续的存储空间里,对应的就可以有一个索引位置的编号,所以我们要访问的时候,根据索引位置就可以快速的访问到当前的数据了,这就是数组最大的一个特点。那在Java的定义当中呢,我们可以基于。
01:02
基本数据类型,比方说int,然后后面加一个中括号,这样去定义一个数组啊那。这种基本数据类型的定义方式当然是跟我们面向对象的这种包装类型啊,Object其实是不太兼容的,所以呢,呃,在SKY在Java当中还有另外一种用法,那就是我们可以啊,比方说啊,我们这里边直接定义一个list,后边在指定它的泛型,为什么要指定泛型呢?啊,就是因为当前你既然存放的所有元素都是相同的类型,我们的占据的空间大小必须一样嘛,那所以当前这个数组或者说列表,它到底元素是什么类型就必须要指定了啊,所以这里边必须要有一个泛型的声明,那scar当中既然是完全面对对象,那自然就没有基本数据类型的这种定义方式了啊,对应的用泛型的这种集合类型的定义方式,其实还是跟Java比较相似的啊,那接下来我们就可以看一看啊,在scla当中到底应该怎么用,前面我们也提到过了,在SC当中要区分一和要区。
02:09
分可变和不可变两种,那对于这个数组而言,当然也是这样,我们首先来介绍不可变数组。不可变数组前面在集合。整个这个类型体系里边,我们也看到就是叫做array,而且在这个可变的里边。就已经不叫arra了啊,直接其实就叫arra buffer了啊,所以关于这个array呢,它本身为了跟Java兼容,并没有直接继承自SKY当中的sick set map3大集合类型的特征,而而是通过底层的影视转换,它可以转换成一个index的S,我们知道既然是数组嘛,当然有索引,所以自然就是带着索引的序列了,所以接下来我们就看一看到底怎么样用这样的一个不可变的数组啊,那其实前面我们不是讲到跟Java类似,可以用这个带泛型的。
03:06
类型的定义嘛,啊,所以大家看到其实这个。语法也非常的简单啊,直接拗一个AR瑞类型的数组,呃,AR瑞数组,那它到底是什么类型呢?把泛型放在后边的中括号里,这个跟Java不一样,Java是间括号,我们这里是中括号,然后另外后边我们还要跟上一个数字表示当前它的大小不可变吧。啊,接下来我们还是在代码里边做一个具体的测试。我们现在新的一张去new一个PACKAGE07。下来我们去创建一个阿va的对象,Object 401,当前我们要测的是不可变的数组,这是imitable array那方法。首先我们来看么样去创建一个普遍的数组,那最简单的方法啊,我们也都想到了,直接去new一个array。
04:12
这里边必须要带上S型,大家看到中括号,然后里边这个类型就是当前不足里边每一个元素的类型,Int类型啊,我们在这里直接定义出来,然后里边大家看到还必须传一个参数,因为点进去的话,你会看到final class array,它后边必须有有泛型,然后呢,它的主构造器必须要带着一个LAS属性,这就是我们说的它不可变嘛,不可变一开始必须定义好到底有多大,它的长度到底是多少,这跟Java里边我们直接用这个基本数据类型定义数组的。方法其实是一样的啊,那接下来我们就是随便可以给一个啊,比方说给一个五,那就表示我们要创建一个大小为五,长度为五的整数int类型的数组,In的这个类型我们也可以让。
05:06
利器去做自动推断,那这里如果我们要写出来的话,当然就是a in这样的明确啊啊,那接下来这其实比较好理解,非常简单,接下来我们要给大家介绍的是另一种。封建的方式。就提的就必须要说这个scla当中特殊的语法了,我们如果在这个A瑞典scalela这个文件里边直接看一下下面我们到底有哪些类对象和方法的话,其实可以看到啊,除了A瑞这个类之外。它还有一个伴生对象瑞,哎,那我们自然就想到了,之前我们说伴生对象有什么用呢?它不是就可以实现类似于工厂的一个作用吗?啊里边我们可以直接访问当前。
06:04
伴生类的各种私有属性和方法,当然就可以创建伴生类的对象,哎,所以我们看看当前的这个array,它是不是也能起到类似的功能呢?我们看一看它里边有什么样的方法,如果要创建的话,我们知道最常见的可能要使用它的apply方法,所以我们看一看这边有没有apply呢?哎,当然是有的啊,看到apply这里,确实它就真的能返回一个。当前类型T式泛型嘛,当前类型的array这里边真的是直接做了一个new arra的操作啊,所以大家看,如果我们不想手动去调这个直接new array,然后传一个长度lengths进来的话,那这里我们也可以直接怎么样直接调当前半生对象的apply方法,这里它的参数又是什么呢?啊,首先apply这里边我们也可以去定义当前的class tag,就是相当于要定义我们当前的这一个泛型对吧?啊,那或者我们也可以不给,比方说上面这个为什么要给泛型呢?那是因为。
07:07
当前的这个类型完全不确定啊,那下面我们就不知道到底的这个数据类型是什么嘛,那也可以比方说我们定义了,明确知道要传的是什么数据类型,那就相当于可以直接不给后面的那个当前的那个类型的标签啊,直接调apply方法就可以了,那我们看看后面要传的参数是什么呢啊,不同类型,比方说现在我们传的是int嘛,那自然调的是这个方法后面的参数,第一个参数X是int,后面XS它是一个可变参数。所以也就表示我们当前可以把所有的int,这不就是数据吗?所有的数据直接传进来。然后接下来就相当于把它们作为元素保存到当前的这个瑞数组里了,你看后面这我们就先创建了一个空的后面,然后怎么样呢?后面接下来这不就是一个for循环,挨个要把它做一个赋值吗?哎,所以接下来其实这个操作非常的简单啊,那我们这里边创建的时候可以更加的轻松,我这里直接就把当前的类型省略掉了,现在不想再用这个new ara int这样复杂的方式了,我直接可以对里边的元素做赋值,那就直接对大家看当前的这一个生对象,直接调它的apply方法,之前我们说过可以直接省略掉点apply,直接加括号,就是调apply方法。
08:36
那里边呢,当然就是当前的数据,比方说我们随便传几个数据进去,42 59 58 91。哎,那前我们其实就创建了横度为5M速分别是这些这五个数的一个二啊,这就是第二另外一种创建的方式啊,因为前面这种方式你会看到啊,当前这个arra本身arr里边我们是创建了长度为五的一个数组,那里边其实现在都根本就没有数。
09:13
所以如果我们要直接打印看它里边的结果的话,你会发现它里边其实都是零。那我们现在就相当于不用再去额外赋值了,创建数组的时候,你既然都不可变嘛,我就说创建数组的时候,直接把当前的所有元素都复制进去,这样会更加的简洁高效。就是关于数组的创建。
我来说两句