一、前言
在 给 Android 开发者的 Kotlin 教程(一)中我们主要就是简单的讲了一下 Kotlin 与 Java 的比较。这一节我们来讲一下 Kotlin 的必备基础,分别是 Kotlin 中的基本数据类型、数组以及集合这三大知识点。
二、认识 Kotlin 基本类型
Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型。
对于整数,存在四种具有不同大小和值范围的类型
类型 | 位宽 | 最小值 | 最大值 |
---|---|---|---|
Byte | 8 | -128 | 127 |
Short | 16 | -32768 | 32767 |
Int | 32 | -2^31 | 2^31 - 1 |
Long | 64 | -2^63 | 2^63 - 1 |
对于浮点数,Kotlin 提供了 Float 和 Double 类型
类型 | 位宽 |
---|---|
Float | 32 |
Double | 64 |
2.1、基本类型代码演练
Kotlin 定义变量的关键字只有 val 和 var 两种。但是在定义 Int 类型变量的时候我们并不需要 val Int2: Int = 2 这样写,直接 val Int2 = 2 就可以了。那是因为 kotlin 能为我们自动推导变量的类型而不需要我们指定。
利用下面的 printType() 方法我们就可以查看每个变量具体的类型了。
fun main() {
println("---main---")
baseType()
}
// Kotlin 基本类型代码演示
fun baseType() {
val num1 = -1.67 // double
val num2 = 2 // Int
val num3 = 2f // Float
val int1 = 3 // Int
println("num1:$num1 num2:$num2 num3:$num3 int1:$int1")
println(abs(num1))
println(num1.toInt()) // 转换成Int
printType(num1)
printType(num2)
printType(num3)
printType(int1)
}
fun printType(param: Any) {
println("$param is ${
param::class.simpleName} type")
}
代码运行结果如下所示:
三、走进 Kotlin 的数组
数组在 Kotlin 中使用 Array 类来表示,它定义了 get 与 set 方法以及 size 属性,以及一些其他有用的成员方法,具体源码如下所示:
public class Array<T> {
public inline constructor(size: Int, init: (Int) -> T)
public operator fun get(index: Int): T
public operator fun set(index: Int, value: T): Unit
public val size: Int
public operator fun iterator(): Iterator<T>
}
3.1、Kotlin 数组的创建技巧
3.1.1、使用 arrayOf() 方法创建数组
我们可以使用库方法 arrayOf() 来创建一个数组并传递元素值给它,例如 arrayOf(1, 2, 3) 创建了 array [1, 2, 3]。
3.1.2 、使用 arrayOfNulls() 方法创建数组
也可以使用库方法 arrayOfNulls() 创建一个指定大小的、所有元素都为空的数组。
3.1.3 、创建有初始值的数组
// 创建一个 Array<String> 初始化为 ["0", "1", "4", "9", "16"]
val asc = Array(5) {
i -> (i * i).toString() }
asc.forEach {
println(it) }
Kotlin 不让我们把 Array 赋值给 Array,以防止可能的运行时失败。
3.1.4 、原生类型数组
Kotlin 也有无装箱开销的专门的类来表示原生类型数组: IntArray、ByteArray、 ShortArray 等等。这些类与 Array 并没有继承关系,但是它们有同样的方法属性集。它们也都有相应的工厂方法:
//通过intArrayOf、floatArrayOf、doubleArrayOf等创建数组
val x: IntArray = intArrayOf(1, 2, 3)
println("x[1] + x[2] = ${
x[1] + x[2]}")
// 大小为 5、值为 [0, 0, 0, 0, 0] 的整型数组
val arr = IntArray(5)
// 例如:用常量初始化数组中的值
// 大小为 5、值为 [42, 42, 42, 42, 42] 的整型数组
val arr = IntArray(5) {
42 }
// 例如:使用 lambda 表达式初始化数组中的值
// 大小为 5、值为 [0, 1, 2, 3, 4] 的整型数组(值初始化为其索引值)
var arr = IntArray(5) {
it * 1 }
3.2、Kotlin 数组的遍历技巧
3.2.1、数组遍历
for (item in array) {
println(item)
}
3.2.2、带索引遍历数组
for (i in array.indices) {
println(i.toString() + "->" + array[i])
}
3.2.3、遍历元素(带索引)
for ((index, item) in array.withIndex()) {
println("$index->$item")
}
3.2.4、forEach 遍历数组
array.forEach {
println(it) }
3.2.5、forEach 增强版
array.forEachIndexed {
index, item ->
println("$index:$item")
}
3.3、数组代码演练
fun main() {
println("---main---")
arrayType()
}
/**
* 数组
*/
fun arrayType() {
// arrayOf
val array: Array