Kotlin - 数组 Array

创建数组

val 声明的数组只能改变元素

var 声明的数组可以改变引用

创建方式 举例

Array ()

通用数组

Array(size: Int, init: (Int) -> T)

val array: Array = 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 = arrayOf(1, '你', "hahaah", false)

for (element: Any in array1) print(element)

val array2: Array = arrayOf(1, 2, 3)

val array3: Array = arrayOf(person1, person2)

指定长度(元素都为null)

arrayOfNulls ()

val arrayNull: Array = arrayOfNulls(6)

空数组

emptyArray ()

val empty: Array = emptyArray()

原生数组(避免拆装箱开销)

intArrayOf ()

***ArrayOf ()

val array3: IntArray = intArrayOf(1, 3, 5, 7)

val array4: CharArray = charArrayOf('a', 'b', 'c')

原生数组 & 通用数组

为了避免不必要的拆装箱开销,或者与Java互操作,可以使用原生类型数组。这些类与Array没有继承关系,只是有相同的方法属性,因此 IntArray 和 Array 是完全不同的类型,但两者可以互转。

原生类型数组 对应Java中的基本数据类型数组

IntArray

***Array

int [ ]

*** [ ]

方法 说明 举例

toIntArray ()

to***Array ()

通用→原生

val ty: Array = arrayOf(1, 2, 3)

val toIntArray: IntArray = ty.toIntArray()

toTypedArray () 原生→通用

val ys: IntArray = intArrayOf(1, 2, 3)

val toTypedArray: Array = ys.toTypedArray()

Person[] people = {new Person(), new Person()};    //Java
val people: Array = arrayOf(Person(), Person())    //Kotlin

 遍历

val arr = arrayOf(1,2,3,4,5)

//通过forEach循环
arr.forEach{
    println(it)
}

//通过iterator循环
var iterable:Iterator = 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>(2)

你可能感兴趣的:(Kotlin,kotlin)