构造集合

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

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

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

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

    空集合

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

    1. val empty = emptyList<String>()

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

    具体类型构造函数

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

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

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

    1. fun main() {
    2. //sampleStart
    3. val sourceList = mutableListOf(1, 2, 3)
    4. val copyList = sourceList.toMutableList()
    5. val readOnlyCopyList = sourceList.toList()
    6. sourceList.add(4)
    7. //readOnlyCopyList.add(4) // 编译异常
    8. println("Read-only copy size: ${readOnlyCopyList.size}")
    9. //sampleEnd
    10. }

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

    1. fun main() {
    2. //sampleStart
    3. val sourceList = mutableListOf(1, 2, 3)
    4. val copySet = sourceList.toMutableSet()
    5. copySet.add(3)
    6. copySet.add(4)
    7. println(copySet)
    8. //sampleEnd
    9. }

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

    1. fun main() {
    2. //sampleStart
    3. val sourceList = mutableListOf(1, 2, 3)
    4. //referenceList.add(4) // 编译错误
    5. sourceList.add(4)
    6. println(referenceList) // 显示 sourceList 当前状态
    7. //sampleEnd
    8. }

    调用其他集合的函数

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

    1. fun main() {
    2. //sampleStart
    3. val numbers = listOf("one", "two", "three", "four")
    4. val longerThan3 = numbers.filter { it.length > 3 }
    5. println(longerThan3)
    6. //sampleEnd
    7. }

    生成转换结果列表:

    1. fun main() {
    2. //sampleStart
    3. val numbers = setOf(1, 2, 3)
    4. println(numbers.map { it * 3 })
    5. println(numbers.mapIndexed { idx, value -> value * idx })
    6. }

    关联生成 Map:

    有关 Kotlin 中集合操作的更多信息,参见.