Kotlin编程实战:创建优雅、富于表现力和高性能的JVM与Android应用程序
上QQ阅读APP看书,第一时间看更新

5.3 对象和基元数组

Array<T>类在Kotlin中表示一个值数组。只有在需要进行低级优化时才使用数组,否则,使用其他数据结构,如列表,我们将在本章后面看到。

创建数组的最简单的方法是使用顶级函数arrayOf()。一旦创建了数组,就可以使用index[]运算符来访问元素。

例如,要创建一个字符串数组,请将所需的值传递给arrayOf()函数:

friends变量保存对新创建的数组实例的引用。对象的类型是Kotlin.Array,即Array<T>,但在JVM上运行时,底层的实际类型是一个Java字符串数组。要得到元素的值,需要使用索引运算符[],然后调用Array<T>的get()方法。当在左侧使用时,索引运算符[]将调用Array<T>的set()方法。

前面的代码创建了一个字符串数组。要创建一个整数数组,我们可能会尝试使用相同的方法,如下例所示:

这是可行的,但可能不是一个明智的方法。将数字传递给arrayOf()时,正如预期的那样,所创建的实例是Array<T>,但是在内部,它是一个封箱的整数类型数组。在处理基元类型时,这种开销是不必要的。

像intArrayOf()这样的专用函数是创建没有封箱开销的专用数组的更好选择。要创建一个int型数组而不是Integer型数组,请将前面的代码更改为:

Array<T>上使用的同样的操作也适用于像IntArray这样的专用类。所以,即使它们是不同的类型,你也可以使用它们,就好像它们是同一类型一样。

除了使用索引运算符[]来获取和设置值之外,还可以使用size属性来确定数组的大小。此外,可以对数组[1]使用多个函数中的一个来方便地使用数组。让我们在刚刚创建的数组上使用size属性和一个有用的方法——average:

探索Kotlin.Array<T>类,来了解可以对对象和基元数组使用的不同方法。

在创建数组时,不必将值写死,如果愿意,还可以计算值。例如,在下面的代码中,我们将计算从1到5的平方,并放到一个数组中,然后将数组中的值相加。

数组构造函数接受两个参数,数组的大小和一个接受索引(从0开始)的函数,并返回将放在该索引处的值。示例中这个函数的语法使用了lambda表达式,我们将在第10章中做进一步探讨。

如果希望元素的有序集合具有灵活的大小,那么可以考虑使用列表而不是数组。此外,与数组不同(数组是可变的)列表有可变和不可变两种形式。

[1] https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html