Kotlin系列四(kotlin中的数组)
六.kotlin中的数组
- 数组是存储一组相同数据类型的容器
基本数据类型数组
kotlin中基本数据类型数组的种类
名称 | 含义 |
---|---|
BtyeArray | 存储8bit整型的数组 |
ShortArray | 存储16bit整型的数组 |
IntArray | 存储32bit整型的数组 |
LongArray | 存储64bit整型的数组 |
UByteArray | 存储8bit无符号整型的数组 |
UShortArray | 存储16bit无符号整型的数组 |
UIntArray | 存储32bit无符号整型的数组 |
ULongArray | 存储64bit无符号整型的数组 |
CharArray | 存储字符类型的数组 |
FloatArray | 存储单精度浮点型的数组 |
DoubleArray | 存储双精度浮点型的数组 |
BooleanArray | 存储布尔型的数组 |
kotlin内置创建基本数据类型数组的方法
方法名 | 含义 |
---|---|
byteArrayOf() | 创建底层存储byte类型数据的数组 |
shortArrayOf() | 创建底层存储short类型数据的数组 |
intArrayOf() | 创建底层存储int类型数据的数组 |
longArrayOf() | 创建底层存储long类型数据的数组 |
ubyteArrayOf() | 创建底层存储无符号byte类型数据的数组 |
ushortArrayOf() | 创建底层存储无符号short类型数据的数组 |
uintArrayOf() | 创建底层存储无符号int类型数据的数组 |
ulongArrayOf() | 创建底层存储无符号long类型数据的数组 |
charArrayOf() | 创建底层存储char类型数据的数组 |
floatArrayOf() | 创建底层存储float类型数据的数组 |
doubleArrayOf() | 创建底层存储double类型数据的数组 |
booleanArrayOf() | 创建底层存储boolran类型数据的数组 |
-
创建基本数据类型数组的三种方式
-
使用构造方法创建指定长度的空数组
//语法格式 数组类型(数组长度);
-
使用构造方法创建指定长度的数组,并使用Lambda表达式初始化数组中的元素
//语法格式 数组类型(数组长度){ Lambda表达式代码块 }
-
使用内置方法创建包含指定元素的数组
//语法格式,以Int类型的数组为例 intArrayOf(元素一,元素二,元素三);
-
-
案例
//以IntArray类型数组为例
//创建基本数据类型数组的三种方式
//1.使用构造方法创建指定长度的空数组,Int数组的默认值是0
val array1 = IntArray(5);
//使用构造方法创建指定长度的空数组:[0, 0, 0, 0, 0]
println("使用构造方法创建指定长度的空数组:${array1.contentToString()}");
//2.使用构造方法创建指定长度的数组,并使用Lambda表达式初始化数组中的元素
val array2 = IntArray(5){
//隐世参数it表示当前遍历的元素下标,会遍历的次数为数组的长度
it;
println("当前隐式参数it的值为:$it");
//Lambda表达式代码块的最后一行作为当前数组索引处的值
2;
}
//等价写法,也可以在参数中使用lambda表达式
// val array2 = IntArray(5,{
// it;
// });
//使用构造方法创建指定长度的数组,并初始化数组中的元素:[2, 2, 2, 2, 2]
println("使用构造方法创建指定长度的数组,并初始化数组中的元素:${array2.contentToString()}");
//3.使用内置方法创建包含指定元素的数组
val array3 = intArrayOf(1,2,3,4,5);
//使用内置方法创建包含指定元素的数组:[1, 2, 3, 4, 5]
println("使用内置方法创建包含指定元素的数组:${array3.contentToString()}");
引用类型数据数组
-
引用数组中的元素都是引用类型,int等基本数据类型存储在引用数组中,实现存储的是对应java中的Integer包装类
-
创建引用型数组的三种方式
-
创建指定长度的空数组
//语法格式 arrayOfNull<数据类型>(数组长度);
-
创建数组时指定元素
//语法格式 arrayOf<数据类型>(元素一,元素二,元素三); //因为kotlin中的类型推断机制,使用指定元素进行创建数组时,可以省略数据 arrayOf(元素一,元素二,元素三);
-
使用Array类的构造方法配合Lambda表达式创建指定长度的数组
//语法格式 Array<数据类型>(数组长度){ Lambda表达式代码块 }
- 案例
println("kotlin中的引用数据类型数组"); //1.创建指定长度的空数组 val array1 = arrayOfNulls<String>(5); //创建指定长度的空数组:[null, null, null, null, null] println("创建指定长度的空数组:${array1.contentToString()}"); //2.创建数组时指定元素 // val array2 = arrayOf<String>("a", "b", "c", "d", "e"); //简写 val array2 = arrayOf("a", "b", "c", "d", "e"); //创建数组时指定元素:[a, b, c, d, e] println("创建数组时指定元素:${array2.contentToString()}"); //3.使用Array类的构造器创建数组 val array3 = Array(5){ //Lambda表达式中可以使用隐式参数it println("当前隐式参数it的值为:$it"); 'a'+it; } //使用Array类的构造器创建数组:[a, b, c, d, e] println("使用Array类的构造器创建数组:${array3.contentToString()}"); //4.当引用类型数组存储的元素数据类型不一致时,这时元素的数组就是存储Any类型的引用型数组,元素也是Any类型的,就不再是原本的数据类型了 val array4 = arrayOf(1, "a", 3.14); println(array4.javaClass);
-
数组的常用操作
- 获取数组的长度,通过size属性
- 通过索引获取元素,"[]"索引操作符的方式或get()方法的方式
- 修改索引位置的元素,"[]"索引操作符的方式或set()方法的方式
- 遍历数组,"for"循环的方式,通过数组属性indeces的方式,通过withIndex()方法同时遍历索引和值的方式
- 案例
//数组的常用操作
val array = arrayOf(1, 2, 3, 4, 5);
println("创建的数组为:${array.contentToString()}");
//1.数组的长度
val length = array.size;
//创建的数组为:[1, 2, 3, 4, 5]
println("数组的长度为:$length");
//2.通过索引获取数组的元素
var element = array[0];
// var element = array.get(0);
//通过索引获取数组的元素为:1
println("通过索引获取数组的元素为:$element");
//3.通过索引修改元素
array[0] = 10;
// array.set(0,10);
//修改后的数组为:[10, 2, 3, 4, 5]
println("修改后的数组为:${array.contentToString()}");
//4.遍历数组
//4.1直接遍历数组的元素
for (v in array){
println("当前元素为:$v");
}
//4.2通过索引遍历数组的元素
for (i in array.indices){
println("当前索引为:${array.indices},当前元素为:${array[i]}");
}
//4.3同时遍历索引和值
for ((index,value) in array.withIndex()){
println("当前索引为:$index,当前元素为:$value");
}
for (indexvalue in array.withIndex()){
println("当前索引为:${indexvalue.index},当前元素为:${indexvalue.value}");
}
多维数组
- 数组中存储数组便是多维数组,也就是数组可以套娃,数组套娃一层就是二维数组,两层就是三维数组,以此类推