创建数组
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 = ty.toIntArray() |
toTypedArray () | 原生→通用 | val ys: IntArray = intArrayOf(1, 2, 3) val toTypedArray: Array<Int> = ys.toTypedArray() |
Person[] people = {new Person(), new Person()}; //Java
val people: Array<Person> = arrayOf(Person(), Person()) //Kotlin
遍历
val arr = arrayOf(1,2,3,4,5)
//通过forEach循环
arr.forEach{
println(it)
}
//通过iterator循环
var iterable:Iterator<Integer> = arr.iterator();
while(iterable.hasNext()){
println(iterable.next())
}
for(element in arr.iterator()){
println(element)
}
//for循环一
for(element in arr){
println(element)
}
//for循环二
for(index in 0..arr.size-1){
println(arr[index])
}
//for循环三
for(index in arr.indices){
println(arr[index])
}
//for循环四
for((index, value) in arr.withIndex()){
println("$index位置的元素是:$value")
}
// 上面写法等价于下面写法
for (element in arr.withIndex()) {
println("${element.index} : ${element.value}")
}
操作
方法 | 说明 |
.size .indices | 数组长度 数组最大索引值 |
get (索引) | 获取元素,推荐使用操作符 [ ] arr[3] 等同于 arr.get(3) |
set (索引,目标值) | 给元素赋值,推荐使用操作符 [ ] arr[3] = "哈" 等同于 arr.set(3,"哈") |
plus (目标值) | 增加:返回一个数组长度+1并用目标值赋值新元素的新数组,不对原数组进行改动 arr + 6 等同于 arr.plus(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 = arr.size //5
//最大索引
val num2 = arr.indices //4
for (i in arr.indices) print(i) //01234
//条件判断
val boolean1 = arr.all { i -> i > 3 } //false,不是全部元素>3
//增
val arr1 = arr.plus(6) //123456,长度+1并赋值为6
val arr2 = arr + 6 //同上
//改
val arr3 = arr.slice(2..4) //345
arr.fill(0) //00000,操作的是原数组
val str1 = cc.joinToString("") //你们好
brr.sort() //12345
val list1 = brr.sorted() //返回一个排序后的list
val brr4 = brr.sortedArray() //返回排序后的新数组
val arr5 = arr.copyOf() //12345
val arr6 = arr.copyOf(2) //12
val arr7 = arr.copyOfRange(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)