集合类型:
Set、Map、List(集、映射、列表)可以看作集合的三大类)
集合类型 | 只读 | 可变 |
---|---|---|
Set | setOf | mutableSetOf、hashSetOf、linkedSetOf、sortedSetOf |
Map | mapOf | mutableMapOf、hashMapOf、linkedMapOf、sortedMapOf |
List | listOf | mutableListOf、arrayListOf |
补充:
1、Kotlin中创建集合的方式例子
val set = hashSetOf(1, 7, 53) //HashSet类
val list = arrayListOf(1, 7, 53) //ArrayList类
val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three") //HashMap类
2、setOf 函数可以创建一个集合:
fun mix(c1:Color, c2:Color) =
when(setOf(c1, c2)){
setOf(RED, YELLOW) -> ORANGE
setOf(BLUE, YELLOW) -> GREEN
setOf(VIOLET, YELLOW) -> INDIGO
else -> throw Exception("Dirty Color")
}
3、Kotlin没有采用它自己的集合类,而是采用的标准的Java集合类,并且Kotlin还在Java类上新增了方法,如:
val number = setOf(1,2,14)
println(number.max())
Kotlin 中的一个数组是一个带有类型参数的类,其元素类型被指定为相应的参数类型。
数组类型的类型参数始终会变成对象类型: 如果声明了一个 Array< Int > ,那么它将会是一个包含装箱整型的数组(它的 Java 类型将是 java.lang.Integer[] )。
声明基本数据类型的数组: Kotlin 提供了若干独立的类,每一种基本数据类型都对应一个。如 Int 类型值的数组叫做 IntArray,还有 ByteArray、CharArray、BooleanArray 等。(它们将被编译为基本数据类型的数组,如 int[]、byte[]、char[]、boolean[] )
arrayOf 函数中包含的元素即指定为该函数的实参
val strings = arrayOf("a", "b", "c")
创建一个给定大小的数组,包含的是null元素
val arrayOfNulls = arrayOfNulls<String>(9)
println (arrayOfNulls.joinToString(" "))
Array构造方法接收数组的大小和一个 lambda 表达式,调用 lambda 表达式来创建每一个数组元素
使用非空元素类型来初始化数组,但不用显式地传递每个元素
val letters = Array<String>(26){ i -> ('a' + i).toString() }
println(letters.joinToString(" ")
该构造方法接收 size 参数并返回一个使用对应基本数据类型默认值(通常是0)初始化好的数组
val fiveZeros = IntArray(5)
该函数接收变长参数的值,并创建存储这些值的数组
val fiveInts = IntArrayOf(1,2,3,4,5)
该构造方法接收一个大小和一个用来初始化每个元素的lambda
val squares = IntArray(5) { i -> (i+1) * (i+1)}
① for-in 循环
val seasons = setOf("春天", "夏天", "秋天", "冬天")
for(season in seasons){
println(season)
}
② forEach()方法
Set 集合继承了 Iterable,因此可使用该接口中定义的 forEach()方法来遍历集合。
该方法需要接受 Lambda 表达式作为参数,该 Lambda 表达式负责对集合元素进行处理。
val seasons = setOf("春天", "夏天", "秋天", "冬天")
seasons.forEach {
println(it)
}
① for-in 循环
val colorMap = mapOf<String, String>("blue" to "蓝色", "balck" to "黑色", "white" to "白色")
//第一种
for (color in colorMap) {
println("${color.key} -> ${color.value}")
}
//第二种
for ((k, v) in colorMap) {
println("$k -> $v")
}
② forEach()方法
val colorMap = mapOf<String, String>("blue" to "蓝色", "balck" to "黑色", "white" to "白色")
colorMap.forEach {
println("${it.key} -> ${it.value}")
}
① for-in 循环
val list = listOf("Apple","Banana","Orange","Pear","Grape")
for (fruit in list) {
println(fruit)
}
② forEach()方法
val list = listOf(1,2,3)
list.forEach {
println(it)
}
① for-in 循环
val array = arrayOf("a", "b", "c")
//1.通过索引
for(i in array.indices) {
println(array[i])
}
//2.通过库函数withIndex
for((index, value) in array.withIndex()){
println("the element at $index is $value")
}
//3.直接遍历 最常规的数组遍历方式
for(item in array){
println(item)
}
② forEach()方法
数组也可以使用 forEach() 方法进行遍历,这是由于:数组使用 foreach 时,JVM在底层把 foreach 转换为普通 for 来循环处理的,与 Iterable 无关
val array = arrayOf("a", "b", "c")
//1. forEach
array.forEach {
println("$it")
}
//2. forEachIndexed 遍历数组带索引
array.forEachIndexed { index, item -> println("$index -> $item") }