创建数组
val 声明的数组只能改变元素
var 声明的数组可以改变引用
创建方式 | 举例 | |
Array () |
通用数组 Array(size: Int, init: (Int) -> T) |
val array: Array<Int> = Array(5) { i -> i * 2 } 5是数组长度,i是索引值,元素赋值为索引值*2 |
原生数组 IntArray (长度) ***Array (长度) |
val ys1 = IntArray(5) //元素都是0 val ys2 = BooleanArray(5) //元素都是false val ys3 = CharArray(5) //元素都是空格 |
|
arrayOfXXX () | 指定元素(元素可为任意类型) arrayOf () |
val array1: Array<Any> = arrayOf(1, '你', "hahaah", false) for (element: Any in array1) print(element) val array2: Array<Int> = arrayOf(1, 2, 3) val array3: Array<Person> = arrayOf(person1, person2) |
指定长度(元素都为null) arrayOfNulls () |
val arrayNull: Array<String> = arrayOfNulls<String>(6) | |
空数组 emptyArray () |
val empty: Array<String> = emptyArray<String>() | |
原生数组(避免拆装箱开销) intArrayOf () ***ArrayOf () |
val array3: IntArray = intArrayOf(1, 3, 5, 7) val array4: CharArray = charArrayOf('a', 'b', 'c') |
原生数组 & 通用数组
为了避免不必要的拆装箱开销,或者与Java互操作,可以使用原生类型数组。这些类与Array没有继承关系,只是有相同的方法属性,因此 IntArray 和 Array<Int> 是完全不同的类型,但两者可以互转。
原生类型数组 | 对应Java中的基本数据类型数组 |
IntArray ***Array |
int [ ] *** [ ] |
方法 | 说明 | 举例 |
toIntArray () to***Array () |
通用→原生 | val ty: Array<Int> = arrayOf(1, 2, 3) val toIntArray: IntArray = () |
toTypedArray () | 原生→通用 | val ys: IntArray = intArrayOf(1, 2, 3) val toTypedArray: Array<Int> = () |
Person[] people = {new Person(), new Person()}; //Java
val people: Array<Person> = arrayOf(Person(), Person()) //Kotlin
遍历
val arr = arrayOf(1,2,3,4,5)
//通过forEach循环
{
println(it)
}
//通过iterator循环
var iterable:Iterator<Integer> = ();
while(()){
println(())
}
for(element in ()){
println(element)
}
//for循环一
for(element in arr){
println(element)
}
//for循环二
for(index in 0..-1){
println(arr[index])
}
//for循环三
for(index in ){
println(arr[index])
}
//for循环四
for((index, value) in ()){
println("$index位置的元素是:$value")
}
// 上面写法等价于下面写法
for (element in ()) {
println("${} : ${}")
}
操作
方法 | 说明 |
.size .indices |
数组长度 数组最大索引值 |
get (索引) | 获取元素,推荐使用操作符 [ ] arr[3] 等同于 (3) |
set (索引,目标值) | 给元素赋值,推荐使用操作符 [ ] arr[3] = "哈" 等同于 (3,"哈") |
plus (目标值) | 增加:返回一个数组长度+1并用目标值赋值新元素的新数组,不对原数组进行改动 arr + 6 等同于 (6) |
slice (区间) | 截取:返回一个截取该区间元素的新数组,不对原数组进行改动 |
fill (目标值) fill (目标值,起始索引,结束索引) |
修改:将该区间的元素赋值为指定值 |
copyOf () copyOf (个数) copyOfRange (起始索引,结束索引) |
返回一个 完全复制了原数组 的新数组 返回一个 正向复制原数组元素个数 的新数组,超过原数组大小的新元素值为null 返回一个 复制原数组该区间元素 的新数组,超过原数组索引范围报错 |
asList () | 数组转集合 |
reverse () reversedArray () reversed () |
反转:将数组中的元素顺序进行反转 返回一个反转后的新数组,不对原数组进行改动 返回一个反转后的list,不对原数组进行改动 |
sort () sortedArray () sorted () |
排序:对数组中的元素进行自然排序 返回一个自然排序后的新数组,不对原数组进行改动 返回一个自然排序后的list,不对原数组进行改动 |
joinToString (字符串分隔符) | 将***Array原生数组拼接成一个String,默认分隔符是“,” |
all (predicate) any (predicate) |
全部元素满足条件返回 true,否则 false 任一元素满足条件返回 true,否则 false |
val arr = arrayOf(1, 2, 3, 4, 5)
val cc = charArrayOf('你','们','好')
val brr = arrayOf(5,2,1,4,3)
//数组长度
val num1 = //5
//最大索引
val num2 = //4
for (i in ) print(i) //01234
//条件判断
val boolean1 = { i -> i > 3 } //false,不是全部元素>3
//增
val arr1 = (6) //123456,长度+1并赋值为6
val arr2 = arr + 6 //同上
//改
val arr3 = (2..4) //345
(0) //00000,操作的是原数组
val str1 = ("") //你们好
() //12345
val list1 = () //返回一个排序后的list
val brr4 = () //返回排序后的新数组
val arr5 = () //12345
val arr6 = (2) //12
val arr7 = (2,4) //34
多维数组
//方式一:数组里面存的元素是数组
val aa = arrayOf(arrayOf(1, 2, 3),arrayOf(4, 5, 6))
print(aa[1][2]) //6
//方式二:元素为null但类型是数组
val bb = arrayOfNulls<Array<Int>>(2)