kotlin 添加第一个 集合_Kotlin中的集合之构造

本文详细介绍了Kotlin中集合的创建与操作,包括元素构造、空集合、List初始化、具体类型构造函数、复制、转换以及其他集合函数的使用。通过实例展示了如何创建、修改和从现有集合中衍生新的集合,以及如何利用过滤、映射和关联等函数进行集合操作。
摘要由CSDN通过智能技术生成

点击上方蓝色文字关注我哦

一天一点kotlin,稳打稳扎成自我。

集合的构造有 元素构造、空集合、list 的初始化函数、具体类型构造函数、复制、调用其他集合的函数。下来我们一个一个看。首先是

元素构造

创建集合的最常用方法是使用标准库函数 listOf()、setOf()、mutableListOf()、mutableSetOf()。如果以逗号分隔的集合元素列表作为参数,编译器会自动检测元素类型。创建空集合时,需要明确指定类型。

val numbersSet = setOf("one", "two", "three", "four")val emptySet = mutableSetOf()

同样的,Map 也有这样的函数 mapOf() 与 mutableMapOf()。映射的键和值作为 Pair 对象传递(通常使用中缀函数 to 创建)。

val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key4" to 1)

注意

to 符号创建了一个短时存活的 Pair 对象,因此建议仅在性能不重要时才使用它。为避免过多的内存使用,请使用其他方法。例如,可以创建可写 Map 并使用写入操作填充它。apply() 函数可以帮助保持初始化流畅。

val numbersMap = mutableMapOf().apply { this["one"] = "1"; this["two"] = "2" }

空集合

还有用于创建没有任何元素的集合的函数:emptyList()、emptySet() 与 emptyMap()。创建空集合时,应指定集合将包含的元素类型。

val empty = emptyList()

list 的初始化函数

对于 List,有一个接受 List 的大小与初始化函数的构造函数,该初始化函数根据索引定义元素的值。

val doubled = List(3, { it * 2 })  // 如果你想操作这个集合,应使用 MutableList
println(doubled)

具体类型构造函数

要创建具体类型的集合,例如 ArrayList 或 LinkedList,可以使用这些类型的构造函数。类似的构造函数对于 Set 与 Map 的各实现中均有提供。

val linkedList = LinkedList(listOf("one", "two", "three"))val presizedSet = HashSet<Int>(32)

复制

要创建与现有集合具有相同元素的集合,可以使用复制操作。标准库中的集合复制操作创建了具有相同元素引用的 浅 复制集合。因此,对集合元素所做的更改会反映在其所有副本中。

在特定时刻通过集合复制函数,例如toList()、toMutableList()、toSet() 等等。创建了集合的快照。结果是创建了一个具有相同元素的新集合 如果在源集合中添加或删除元素,则不会影响副本。副本也可以独立于源集合进行更改。

val sourceList = mutableListOf(1, 2, 3)val copyList = sourceList.toMutableList()val readOnlyCopyList = sourceList.toList()
sourceList.add(4)
println("Copy size: ${copyList.size}")   //readOnlyCopyList.add(4)             // 编译异常
println("Read-only copy size: ${readOnlyCopyList.size}")

这些函数还可用于将集合转换为其他类型,例如根据 List 构建 Set,反之亦然。

val sourceList = mutableListOf(1, 2, 3)    val copySet = sourceList.toMutableSet()
copySet.add(3)
copySet.add(4)    
println(copySet)

或者,可以创建对同一集合实例的新引用。使用现有集合初始化集合变量时,将创建新引用。因此,当通过引用更改集合实例时,更改将反映在其所有引用中。

val sourceList = mutableListOf(1, 2, 3)val referenceList = sourceList
referenceList.add(4)
println("Source size: ${sourceList.size}")

集合的初始化可用于限制其可变性。例如,如果构建了一个 MutableList 的 List 引用,当你试图通过此引用修改集合的时候,编译器会抛出错误。

val sourceList = mutableListOf(1, 2, 3)val referenceList: List<Int> = sourceList//referenceList.add(4)            // 编译错误
sourceList.add(4)
println(referenceList) // 显示 sourceList 当前状态

调用其他集合的函数

可以通过其他集合各种操作的结果来创建集合。例如,过滤列表会创建与过滤器匹配的新元素列表:

val numbers = listOf("one", "two", "three", "four")  val longerThan3 = numbers.filter { it.length > 3 }
println(longerThan3)

映射生成转换结果列表:

val numbers = setOf(1, 2, 3)
println(numbers.map { it * 3 })
println(numbers.mapIndexed { idx, value -> value * idx })

关联生成 Map:

val numbers = listOf("one", "two", "three", "four")
println(numbers.associateWith { it.length })

推荐阅读

25aa341d726bcc6a28f3d64af5de6cfa.png小美 4b835be737fa4e4fc9ae8081fa5ce126.png我要学  “Kotlin”我要学  “android” 1f75bc70bc4f0fc2ca9783a08d6c58ab.png 2c735d7383052aa2342baf4289272357.png小李

关注教程

11f0b48117e5eb5b9f8875e3e940b895.gif

讨论区

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值