Kotlin基础学习(十)—— 集合 & 数组

一、集合——只读集合 & 可变集合

  • kotlin.collections.Collection:只读集合,执行从该集合中读取数据的操作,可遍历集合中的元素、获取集合大小、判断集合中是否包含某个元素
  • kotlin.collections.MutableCollection:可变集合,执行修改集合中的数据的操作,继承了kotlin.collections.Collection接口,还提供了方法来添加和移除元素、清空集合等
    Kotlin基础学习(十)—— 集合 & 数组_第1张图片
    Kotlin 对待 Java 标准类的方式:在 Kotlin 看来,java.util.ArrayList 和 java.util.HashSet 分别继承自 MutableList 接口 和 MutableSet 接口。同理,其它集合库(LinkedList、SortedSet等)也是如此。

集合类型:

Set、Map、List(集、映射、列表)可以看作集合的三大类)

  • 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 中的一个数组是一个带有类型参数的类,其元素类型被指定为相应的参数类型。

1、数组类型

数组类型的类型参数始终会变成对象类型: 如果声明了一个 Array< Int > ,那么它将会是一个包含装箱整型的数组(它的 Java 类型将是 java.lang.Integer[] )。

声明基本数据类型的数组: Kotlin 提供了若干独立的类,每一种基本数据类型都对应一个。如 Int 类型值的数组叫做 IntArray,还有 ByteArray、CharArray、BooleanArray 等。(它们将被编译为基本数据类型的数组,如 int[]、byte[]、char[]、boolean[] )

2、在 Kotlin 中创建 对象数组 的方法:
① arrayOf 函数

arrayOf 函数中包含的元素即指定为该函数的实参

val strings = arrayOf("a", "b", "c")
② arrayOfNulls 函数

创建一个给定大小的数组,包含的是null元素

val arrayOfNulls = arrayOfNulls<String>(9)
println (arrayOfNulls.joinToString(" "))
③ Array构造方法

Array构造方法接收数组的大小和一个 lambda 表达式,调用 lambda 表达式来创建每一个数组元素

使用非空元素类型来初始化数组,但不用显式地传递每个元素

val letters = Array<String>(26){ i -> ('a' + i).toString() }
println(letters.joinToString(" ")
3、在 Kotlin 中创建 基本数据类型数组 的方法:
① 构造方法(如 IntArray)

该构造方法接收 size 参数并返回一个使用对应基本数据类型默认值(通常是0)初始化好的数组

val fiveZeros = IntArray(5)
② 工厂函数(如 IntArray 的 intArrayOf)

该函数接收变长参数的值,并创建存储这些值的数组

val fiveInts = IntArrayOf(1,2,3,4,5)
③ 另一种构造方法

该构造方法接收一个大小和一个用来初始化每个元素的lambda

val squares = IntArray(5) { i -> (i+1) * (i+1)}

三、集合和数组的遍历

1、遍历 Set

① for-in 循环

val seasons = setOf("春天", "夏天", "秋天", "冬天")
for(season in seasons){
	println(season)
}

② forEach()方法

Set 集合继承了 Iterable,因此可使用该接口中定义的 forEach()方法来遍历集合。
该方法需要接受 Lambda 表达式作为参数,该 Lambda 表达式负责对集合元素进行处理。

val seasons = setOf("春天", "夏天", "秋天", "冬天")
seasons.forEach {
    println(it)
}
2、遍历 Map

① 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}")
}
3、遍历 List

① 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)
}
3、遍历数组

① 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") }

你可能感兴趣的:(Kotlin基础,kotlin,学习,java)