创建数组
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)