2:kotlin集合(Collections)

集合有助于数据分组,方便后续操作

集合类型 说明
Lists 有序的可重复的集合
Sets 无序的不可重复的集合
Maps 键值对映射集合,键唯一,且一个键只能映射到一个值

每个集合类型都可以是可变的或者只读的

List

List按照添加的顺序存储内容,并允许重复

存储的内容通常称作元素

List类型

创建只读List使用listOf()方法

创建可变List使用mutableListOf()方法

在创建列表时,Kotlin可以推断存储项的类型。可以在列表声明后的尖括号<>中添加类型来显式声明类型

kotlin 复制代码
fun main() {
    val readOnlyShapes = listOf("triangle", "square", "circle")
    println(readOnlyShapes) // [triangle, square, circle]

    val shapes: MutableList<String> = mutableListOf("triangle", "square", "circle")
    println(shapes) // [triangle, square, circle]
    shapes[2] = "circle2"
    // shapes[3] = "circle3"   // Index 3 out of bounds for length 3
    println(shapes) // [triangle, square, circle2]
}

操作MutableList索引不能超过初始长度

为了防止不必要的修改,你可以通过将可变列表赋值给List来获得它们的只读视图

kotlin 复制代码
fun main() {
    val shapes: MutableList<String> = mutableListOf("triangle", "square", "circle")
    val shapesLocked: List<String> = shapes
}

这种方式通常叫做铸造(casting)

List常用方法

查看List方法

获取元素

kotlin 复制代码
fun main() {
   val readOnlyShapes = listOf("triangle", "square", "circle")
   println("The first item in the list is: ${readOnlyShapes[0]}")  // The first item in the list is: triangle
   println("The first item in the list is: ${readOnlyShapes.first()}") // The first item in the list is: triangle
   println("The last item in the list is: ${readOnlyShapes.last()}")   // The last item in the list is: circle
}

获取长度

复制代码
fun main() {
    val readOnlyShapes = listOf("triangle", "square", "circle")
    println("This list has ${readOnlyShapes.count()} items") // This list has 3 items
}   

判断是否包含某一元素

kotlin 复制代码
fun main() {
    val readOnlyShapes = listOf("triangle", "square", "circle")
    println("circle" in readOnlyShapes) // true
}

新增和删除

kotlin 复制代码
fun main() {
    val shapes: MutableList<String> = mutableListOf("triangle", "square", "circle")
    // 添加 "pentagon"
    shapes.add("pentagon")
    println(shapes) // [triangle, square, circle, pentagon]
    
    // 删除第一个 "pentagon"
    shapes.remove("pentagon")
    println(shapes) // [triangle, square, circle]
}

Set

Set集合中存储的数据无序并且不能重复

Set类型

创建只读Set使用setOf()方法

创建可变Set使用MutableList()方法

kotlin 复制代码
fun main() {
    val readOnlyFruit = setOf("apple", "banana", "cherry", "cherry")
    val fruit: MutableSet<String> = mutableSetOf("apple", "banana", "cherry", "cherry")
}

Set常用方法

获取元素

因为Set为无序集合,所以不能通过索引获取集合元素

kotlin 复制代码
fun main() {
    val set = setOf("apple", "banana", "cherry", "cherry")
    println("The first item in the set is: ${set.first()}") // The first item in the set is: apple
    println("The last item in the set is: ${set.last()}") //  The last item in the set is: cherry
}

Map

Map以键值对的形式存储数据。你可以通过引用键来访问值

键是唯一的,如果插入重复键则会覆盖之前的值

Map类型

要创建只读Map,使用mapOf()函数

要创建可变地图MutableMap,使用mutableMapOf()函数

在创建Map时,kotlin可以推断出存储的元素类型。要显式声明类型,可以在Map声明后的尖括号<>中添加键和值的类型。例如:MutableMap<String, Int>。键的类型为String,值的类型为Int

kotlin 复制代码
fun main() {
    val readOnlyJuiceMenu = mapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
    println(readOnlyJuiceMenu)  // {apple=100, kiwi=190, orange=100}
    
    val juiceMenu: MutableMap<String, Int> = mutableMapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
    println(juiceMenu)  // {apple=100, kiwi=190, orange=100}
}

常用方法

获取数据

使用键获取值

kotlin 复制代码
fun main() {
    val readOnlyJuiceMenu = mapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
    println(readOnlyJuiceMenu["apple"]) // 100
}

获取所有的键或者值

kotlin 复制代码
fun main() {
    val readOnlyJuiceMenu = mapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
    println(readOnlyJuiceMenu.keys) // [apple, kiwi, orange]
    println(readOnlyJuiceMenu.values)   // [100, 190, 100]
}

获取键值对数量

kotlin 复制代码
fun main() {
    val readOnlyJuiceMenu = mapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
    println(readOnlyJuiceMenu.count()) // 3
}

修改/删除

kotlin 复制代码
fun main() {
    val juiceMenu: MutableMap<String, Int> = mutableMapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
    juiceMenu.put("coconut", 150) // 添加键"coconut"和值 150
    println(juiceMenu) // {apple=100, kiwi=190, orange=100, coconut=150}
    juiceMenu.put("apple", 200) // 修改"coconut"的值成 200
    println(juiceMenu) // {apple=200, kiwi=190, orange=100, coconut=150}

    juiceMenu.remove("orange")    // 删除"orange"
    println(juiceMenu)  // {apple=200, kiwi=190, coconut=150}
}

是否包含某元素

是否包含某个键

kotlin 复制代码
fun main() {
    val readOnlyJuiceMenu = mapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
    println(readOnlyJuiceMenu.containsKey("kiwi"))  // true
    println("orange" in readOnlyJuiceMenu.keys) // true
}

是否包含某个值

kotlin 复制代码
fun main() {
    val readOnlyJuiceMenu = mapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
    println(200 in readOnlyJuiceMenu.values)  // false
}
相关推荐
2501_9159090628 分钟前
Windows 打开 Xcode 工程,编译调试 Xcode 项目并和 Mac 同事协作
ide·windows·vscode·macos·ios·个人开发·xcode
承渊政道40 分钟前
Linux网络学习【数据链路层、ARP工作过程与ARP欺骗详解】
linux·网络·学习·数据链路层·arp
CS_Zero1 小时前
安卓开发:Linux的android工具命令
android·linux·运维
女神下凡1 小时前
芯参谋(84):Linux eMMC 驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件
vortex51 小时前
Windows Server IIS 运维配置指南:架构、身份、安全与排障
运维·windows·架构
无足鸟ICT10 小时前
【RHCA+】vmstat命令(监控系统资源)
linux·服务器
闪亮的路灯10 小时前
Linux 安装mqtt服务mosquitto
linux·运维·服务器
HideF10 小时前
nmcli
linux·服务器·网络
qetfw11 小时前
UOS DHCP Relay:跨网段分配与 IP、DNS、网关验证
linux·服务器·网络·tcp/ip·uos
叼烟扛炮13 小时前
Linux 学习笔记(四十一):TCP 并发演进——从单进程到多线程服务器
linux·运维·服务器·网络·笔记·学习·tcp/ip