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

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

kotlin.collections.Collection:只读集合,执行从该集合中读取数据的操作,可遍历集合中的元素、获取集合大小、判断集合中是否包含某个元素

kotlin.collections.MutableCollection:可变集合,执行修改集合中的数据的操作,继承了kotlin.collections.Collection接口,还提供了方法来添加和移除元素、清空集合等

Kotlin 对待 Java 标准类的方式:在 Kotlin 看来,java.util.ArrayList 和 java.util.HashSet 分别继承自 MutableList 接口 和 MutableSet 接口。同理,其它集合库(LinkedList、SortedSet等)也是如此。

集合类型:

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

集合类型只读可变

SetsetOfmutableSetOf、hashSetOf、linkedSetOf、sortedSetOf

MapmapOfmutableMapOf、hashMapOf、linkedMapOf、sortedMapOf

ListlistOfmutableListOf、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") }

————————————————

版权声明:本文为CSDN博主「浅唱整个春天」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_32677531/article/details/126092637

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值