kotlin为数组增加了一个Array类,为元素是基本类型的数组增加了XxxArray类。
kotlin自己提供了一套集合体系,增加了可变和不可变集合的概念。
kotlin的List代表有序,集合元素可重复的集合;Set代表无序,集合元素不可重复的集合;Map则采用key-value对的形式存储数据,每项数据都由key-value对组成。
Kotlin的数组使用Array<T>类代表,kotlin数组就是一个Array类的实例,所以kotlin数组也算是引用类型。
创建数组
kotlin创建数组就是创建Array<T>类的实例,kotlin即可允许通过Array<T>类的构造器来创建实例,也可以通过arrayOf()等工具函数来创建实例.
创建数组的两种方式
- 使用arrayOf(),arrayOfNulls(),emptyArray()等工具函数
- 使用Array(size:Int,init:(Int)->T)构造器
//创建指定元素的数组(相当于Java数组的静态初始化)
var arr1= arrayOf("java","kotlin","swift","go")
var intArr1= arrayOf(2,4,500,-40)
//创建指定长度,指定类型的空数组(相当于Java数组的动态初始化)
var arr2= arrayOfNulls<Double>(5)
var intArr2= arrayOfNulls<Int>(6)
//创建长度为0的空数组
var arr3= emptyArray<String>()
var intArr3= emptyArray<Int>()
//创建指定长度,使用表达式初始化数组元素
var arr4=Array(5) { it*2
}
var strArr4=Array(6) {"hello"}
kotlin专门提供了ByteArray,ShortArray,IntArray,LongArray,CharArray,FloatArray,DoubleArray,BooleanArray,分别用于映射Java的byte[],short[],int[],long[],char[],float[],double[],boolean[]这8种基本类型的数组。
var intArr= intArrayOf(2,40,30)
var doubleArr= doubleArrayOf(2.3,3.5,-3.0)
var intArr5=IntArray(3){
it*it
}
基本类型的元素不允许为null
使用数组
数组的常用方法就是访问数组元素,包括对数组元素进行赋值和取出数组元素的值。
访问数组元素是通过数组引用变量后紧跟一个方括号[]实现的,方括号里是数组元素的索引值。
kotlin语言的数组索引值是从0开始的
//创建包含指定元素的数组
var strArr = arrayOf("Kotlin", "Java", "Go", "Swift")
//使用两种方式获取数组元素
println(strArr[1])
println(strArr.get(1))
//使用两种方式修改数组元素
strArr[1] = "Python"
strArr.set(2, "Ruby")
println(Arrays.toString(strArr))
3.使用for-in循环遍历数组
kotlin的for-in循环可自动遍历数组的每个元素
var languages= arrayOf("java","python","swift")
for(language in languages){
println(language)
}
使用for-in循环来遍历数组元素或集合元素时,不允许对循环变量进行赋值。
使用数组索引
kotlin的数组还提供了一个indices属性,该属性即可返回数组的索引区间。
var languages= arrayOf("java","python","swift")
for(i in languages.indices){
println(languages[i])
}
还可以使用数组的withIndex()方法来同时访问数组的索引和元素,该方法返回一个Iterable对象,该对象的所有元素都是IndexedValue。
var languages= arrayOf("java","python","swift")
for((index,value) in languages.withIndex()){
println("索引为${index}的元素是:${value}")
}
数组常用的方法
var arr= arrayOf(2,4,5,6)
//判断所有元素的平方都大于20
println(arr.all {it*it>20 })
//判断是否任一元素的平方大于20
println(arr.any { it*it>20 })
//根据数组元素来计算<K,V>对,返回所有<K,V>对组成的Map集合
//K是数组元素+10,V是数组元素的平方
var result=arr.associate { it+10 to it*it }
println("result为:${result}")
//创建一个可变的map集合
var map= mutableMapOf(1 to 200, 2 to 120, -1 to 130)
//将计算出来的key,value对添加到map集合中
arr.associateByTo(map,{it*it})
println("map为${map}")
//计算所有元素的总和
println(arr.fold(0,{acc,e->acc+e}))
网友评论